Ошибка компиляции g++ + cmake + Conan + macOS m2 + jsoncppC++

Программы на C++. Форум разработчиков
Ответить
Anonymous
 Ошибка компиляции g++ + cmake + Conan + macOS m2 + jsoncpp

Сообщение Anonymous »

Я пытаюсь скомпилировать следующий MWE, который использует jsoncpp, установленный из Conan и настроенный с помощью cmake, используя g++-12 (из самодельного продукта), но я сталкиваюсь со всеми типами ошибок компоновки. (добавление репозитория, чтобы было проще запускать MWE https://github.com/araml/link_error)
main.cpp.

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

#include 
#include 
#include 

int main() {
std::ifstream j1_json("j1");

Json::Value j1;
Json::Reader parser;

if (!parser.parse(j1_json, j1)) {
puts("Error when parsing j1");
}

return 0;
}
cmake

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

cmake_minimum_required(VERSION 3.16)

project(j1_test)
enable_testing()

set(CMAKE_CXX_FLAGS "-std=c++2a -ggdb -Wall -Wextra -Og -fno-inline-functions")
set(CMAKE_C_COMPILER "gcc-12") # I know not the best but easier here for the examples purpose
set(CMAKE_CXX_COMPILER "g++-12")

find_package(jsoncpp CONFIG REQUIRED)

add_executable(j1 src/main.cpp)
target_link_libraries(j1 JsonCpp::JsonCpp)
conanfile.txt

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

[requires]
jsoncpp/1.9.5

[generators]
CMakeDeps
CMakeToolchain
Что я использую

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

conan install conanfile.txt --install-folder conan --build=missing -pr:b=default
mkdir -p build
push build
cmake -DCMAKE_TOOLCHAIN_FILE=./conan/conan_toolchain.cmake -DCMAKE_BUILD_TYPE=Release -G Ninja ../
cmake --build . -j 8
popd
вывод ошибки (частичный)

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

[2/2] Linking CXX executable j1
FAILED: j1
: && g++-12 -std=c++2a -ggdb -Wall -Wextra -Og -fno-inline-functions -O3 -DNDEBUG -arch arm64 -isysroot /Library/Developer/CommandLineTools/SDKs/MacOSX.sdk -Wl,-search_paths_first -Wl,-headerpad_max_install_names  CMakeFiles/j1.dir/src/main.cpp.o -o j1  /Users/meera/.conan/data/jsoncpp/1.9.5/_/_/package/2f2de4e3345f667bb03ed16a03f45c72c978d397/lib/libjsoncpp.a && :
Undefined symbols for architecture arm64:
"__ZN4Json6Reader5parseERSiRNS_5ValueEb", referenced from:
_main in main.cpp.o
"__ZNKSt3__112basic_stringIcNS_11char_traitsIcEENS_9allocatorIcEEE4findEcm", referenced from:
__ZN4Json12_GLOBAL__N_113valueToStringEdbjNS_13PrecisionTypeE in libjsoncpp.a(json_writer.cpp.o)
"__ZNKSt3__112basic_stringIcNS_11char_traitsIcEENS_9allocatorIcEEE7compareEmmPKcm", referenced from:
__ZNK4Json19StreamWriterBuilder15newStreamWriterEv in libjsoncpp.a(json_writer.cpp.o)
"__ZNKSt3__115basic_stringbufIcNS_11char_traitsIcEENS_9allocatorIcEEE3strEv", referenced from:
__ZN4Json5ValueC2EPKc in libjsoncpp.a(json_value.cpp.o)
__ZN4JsonL29duplicateAndPrefixStringValueEPKcj in libjsoncpp.a(json_value.cpp.o)
__ZNK4Json5Value9asCStringEv in libjsoncpp.a(json_value.cpp.o)
__ZNK4Json5Value8asStringEv in libjsoncpp.a(json_value.cpp.o)
__ZNK4Json5Value5asIntEv in libjsoncpp.a(json_value.cpp.o)
__ZNK4Json5Value6asUIntEv in libjsoncpp.a(json_value.cpp.o)
__ZNK4Json5Value7asInt64Ev in libjsoncpp.a(json_value.cpp.o)
Если я устанавливаю libc++, -lc++, я получаю другой тип ошибки

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

-- Using Conan toolchain: jsoncpp_test/conan/conan_toolchain.cmake
-- Conan: Target declared 'JsonCpp::JsonCpp'
-- Configuring done
-- Generating done
-- Build files have been written to: /Users/meera/Projects/jsoncpp_test/build
[2/2] Linking CXX executable j1
FAILED: j1
: && g++-12 -std=c++2a -ggdb -Wall -Wextra -lc++ -Og -fno-inline-functions -O3 -DNDEBUG -arch arm64 -isysroot /Library/Developer/CommandLineTools/SDKs/MacOSX.sdk -Wl,-search_paths_first -Wl,-headerpad_max_install_names  CMakeFiles/j1.dir/src/main.cpp.o -o j1  /Users/meera/.conan/data/jsoncpp/1.9.5/_/_/package/2f2de4e3345f667bb03ed16a03f45c72c978d397/lib/libjsoncpp.a && :
Undefined symbols for architecture arm64:
"__ZN4Json6Reader5parseERSiRNS_5ValueEb", referenced from:
_main in main.cpp.o
ld: symbol(s) not found for architecture arm64
collect2: error: ld returned 1 exit status
ninja: build stopped: subcommand failed.
~/Projects/jsoncpp_test
Компиляция с помощью apple-clang работает нормально, но мне нужно использовать g++-12, поскольку clang не поддерживает некоторые функции, которые я хочу использовать.< /п>

Подробнее здесь: https://stackoverflow.com/questions/749 ... m2-jsoncpp
Ответить

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

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

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

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

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