Символ посмотрите ошибки в сборке CmakeC++

Программы на C++. Форум разработчиков
Ответить
Anonymous
 Символ посмотрите ошибки в сборке Cmake

Сообщение Anonymous »

В настоящее время я делаю небольшой проект с намерением сделать неполную реализацию JPEG в долгосрочной перспективе. До этого я выполняю реализацию относительно более простого формата файла PNG. Ошибки, которые я получаю, следующие: < /p>

Код: Выделить всё

Undefined symbols for architecture arm64:
"PNG::verify_png_header(std::__1::bitset const&)", referenced from:
_main in main.cpp.o
"PNG::PNG::PNG(std::__1::basic_string_view)", referenced from:
_main in main.cpp.o
< /code>
Структура файла следующая: < /p>
CMakeLists.txt
src/
CMakeLists.txt
main.cpp
png/
CMakeLists.txt
png_types.cpp
png.cpp
common/
common.cpp
CMakeLists.txt
lib/
include/
png/
png_types.hpp
png.hpp
common/
common.hpp
debug/
release/
< /code>
для настройки сборки I Do: < /p>
cd debug
cmake -DCMAKE_BUILD_TYPE=debug ..
cmake --build .
< /code>
Содержимое файлов cmakelists.txt следующее: < /p>
cmakelists.txt:
# CMakeLists.txt

cmake_minimum_required(VERSION 3.30.5)

project(parse_jpeg)

#CMake includes
include(CTest)
enable_testing()

# Required packages
find_package(OpenGL REQUIRED)
find_package(GLUT REQUIRED)

# Compiler info
set(CMAKE_CXX_COMPILER clang++)
set(CMAKE_CXX_STANDARD 23)

# Generate compile_commands.json
set(CMAKE_EXPORT_COMPILE_COMMANDS ON)

# Setting project directories
set(INCLUDE_DIRS ${CMAKE_SOURCE_DIR}/include)
set(TEST_INCLUDE_DIRS ${CMAKE_SOURCE_DIR}/tests/include ${INCLUDE_DIRS})

# Set output directories
set(CMAKE_LIBRARY_OUTPUT_DIRECTORY ${CMAKE_SOURCE_DIR}/lib)

# Default compiler flags
set(CMAKE_CXX_FLAGS_DEBUG "-Wall -Wextra -Wconversion -pedantic -O0 -ggdb -fpic")
set(CMAKE_CXX_FLAGS_RELEASE "-Werror -DNDEBUG -march=native -Wall -Wextra -pedantic -Wconversion -O3 -fpic")

# Important subdirectories
add_subdirectory(src)
add_subdirectory(tests)

message(STATUS "LINK_LIBS: ${LINK_LIBS}")
add_executable(main src/main.cpp)

target_link_libraries(main PRIVATE ${LINK_LIBS})
target_include_directories(main PRIVATE ${INCLUDE_DIRS})
src/cmakelists.txt:

Код: Выделить всё

# src/CMakeLists.txt

# Add subdirectories
add_subdirectory(common)
add_subdirectory(png)

# Pass lists back to parent scope
set(LINK_LIBS ${LINK_LIBS} PARENT_SCOPE)
set(PNG_SOURCES ${PNG_SOURCES} PARENT_SCOPE)
set(COMMON_SOURCES ${COMMON_SOURCES} PARENT_SCOPE)
src/png/cmakelists.txt:

Код: Выделить всё

# src/png/CMakeLists.txt

set(PNG_SOURCES png_types.cpp png.cpp)

message(STATUS "Creating PNG shared library, sources:  ${PNG_SOURCES}")
add_library(PNG SHARED ${PNG_SOURCES})
target_include_directories(PNG PRIVATE ${INCLUDE_DIRS})

set(LINK_LIBS ${LINK_LIBS} PNG PARENT_SCOPE)
set(PNG_SOURCES ${PNG_SOURCES} PARENT_SCOPE)
src/common/cmakelists.txt

Код: Выделить всё

# src/common/CMakeLists.txt

set(COMMON_SOURCES common.cpp)

message(STATUS "Creating COMMON shared library, sources: ${COMMON_SOURCES}")
add_library(COMMON SHARED ${COMMON_SOURCES})
target_include_directories(COMMON PRIVATE ${INCLUDE_DIRS})

set(LINK_LIBS ${LINK_LIBS} COMMON PARENT_SCOPE)
set(COMMON_SOURCES ${COMMON_SOURCES} PARENT_SCOPE)
< /code>
Любая идея, что настроено неправильно?/opt/homebrew/bin/cmake -E cmake_link_script CMakeFiles/main.dir/link.txt --verbose=1
clang++ -Wall -Wextra -Wconversion -pedantic -O0 -ggdb -fpic -arch arm64 -isysroot /Library/Developer/CommandLineTools/SDKs/MacOSX15.2.sdk -Wl,-search_paths_first -Wl,-headerpad_max_install_names CMakeFiles/main.dir/src/main.cpp.o -o main  -Wl,-rpath,path/to/repo/lib path/to/repo/lib/libCOMMON.dylib path/to/repo/lib/libPNG.dylib
Undefined symbols for architecture arm64:
"PNG::verify_png_header(std::__1::bitset const&)", referenced from:
_main in main.cpp.o
"PNG::PNG::PNG(std::__1::basic_string_view)", referenced from:
_main in main.cpp.o
ld: symbol(s) not found for architecture arm64
clang++: error: linker command failed with exit code 1 (use -v to see invocation
По какой -то причине я не вижу, чтобы это добавляло здесь какие -либо параметры -i, я попытался добавить их в флаги сборки вручную, но это не исправляло.

Подробнее здесь: https://stackoverflow.com/questions/795 ... make-build
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «C++»