Я создаю программу на C++, она создается в Windows с использованием Visual Studio, но поскольку она будет использоваться в Linux и Windows, я попытался скомпилировать ее в Ubuntu с помощью g ++, но компилятор продолжает выдавать мне ошибку. (Он отлично работает в окнах и не использует зависимости от окон)
Я использую следующую команду:
g++ -o Test *.cpp -I /home/user/vcpkg/installed/x64-linux/include/ -L /home/user/vcpkg/installed/x64-linux/lib/ -ldl -lbz2 -llzma -lz -lssl -lpthread -lcrypto -lcpprest -lcryptopp
часть компиляции идет хорошо, но это дает мне ошибку со связью, ниже ошибка - это то, что я продолжаю получать:
/usr/bin/ld: /home/user/vcpkg/installed/x64-linux/lib//libcrypto.a(dso_dlfcn.o): undefined reference to symbol 'dlclose@@GLIBC_2.2.5'
/usr/lib/gcc/x86_64-linux-gnu/7/../../../x86_64-linux-gnu/libdl.so: error adding symbols: DSO missing from command line
collect2: error: ld returned 1 exit status
Когда я смотрел на переполнение стека, я видел несколько человек с такими же проблемами, но все, что я мог найти в качестве ответа, - это добавить -ldl в командную строку, что я и сделал, но не дало никакого эффекта.
Есть у кого-нибудь идеи, как это решить? Любая помощь будет оценена.
@Someprogrammerdude ваш комментарий выглядит как ответ. А может где-то есть дурак?
@YSC Да, там так много дубликатов, что я уверен, что кто-то скоро придет и закроет это.
Спасибо @Someprogrammerdude, что помогло :) Извините за вопрос нуба, это мой первый раз, когда я строю с g ++





Порядок имеет значение! Если библиотека A зависит от библиотеки B, тогда A должен указать до B в командной строке при компоновке. Короче поставить
-ldlпоследний (или хотя бы после-lcrypto).