Я компилирую проект, который нуждается в boost::filesystem
. Я включил следующие флагов на этапе компиляции:
g++ -Wall -ggdb -Werror -std=c++11 -lboost_system
-lboost_filesystem -I /custom/path/to/boost_1_67_0
-o build/main build/cp.o build/walk.o build/diff.o build/main.o
, и я получаю сообщение об ошибке:
build/cp.o: In function `boost::filesystem::relative(boost::filesystem::path const&, boost::filesystem::path const&)':
/custom/path/boost_1_67_0/boost/filesystem/operations.hpp:690: undefined reference to `boost::filesystem::detail::relative(boost::filesystem::path const&, boost::filesystem::path const&, boost::system::error_code*)'
build/cp.o: In function `boost::filesystem::weakly_canonical(boost::filesystem::path const&)':
/custom/path/boost_1_67_0/boost/filesystem/operations.hpp:728: undefined reference to `boost::filesystem::detail::weakly_canonical(boost::filesystem::path const&, boost::system::error_code*)'
collect2: error: ld returned 1 exit status
make: *** [build] Error 1
Я подозреваю, что это из-за того, что у меня есть другие другие boost::filesystem
двоичные файлы, некоторые из которых не имеют relative
и weakly_canonical
в своих версиях. Я не знаю, где указать аргумент, чтобы указать расположение двоичных файлов. Я подозреваю, что это связано с флагами lboost_system
и lboost_filesystem
, где я могу указать местоположение.
Я сейчас в процессе создания. так что, но я вижу, что файловая система .so уже успешно построена на /custom/path/boost_1_67_0/bin.v2/libs/filesystem/build/gcc-4.8.5/release/threading-multi/libboost_filesystem.so.1.67.0
,, поэтому я хочу указать на это в среднем. Построение библиотеки занимает очень много времени.
Значит, это флаги -lboost_{libname}
, которые я могу расширить? Это флаг -I
?
EDIT: теперь, когда двоичное местоположение, указанное --prefix
во время сборки, выполнено, я попробовал то же самое, даже с -L
, и это не сработало. Обратитесь к моему ответу ниже для решения LD_LIBRARY_PATH
.
У меня есть решение, но это не красиво:
Я подозреваю, что это связано с тем, что другой бинарный файл библиотеки boost указан в
$LD_LIBRARY_PATH
, я не мог загрузить свою собственную библиотеку в порядке приоритета, используя-L /custom/path/...
.Таким образом, я сделал:
И он работает.
Это отнюдь не хороший ответ, потому что он не делает этот процесс сборки переносимым для пользователей без флага
LD_LIBRARY_PATH
. Вместо этого будут утверждены лучшие ответы.Похоже, вам все равно нужно предоставить опцию -L GCC. Используйте -L, чтобы сообщить компилятору, где искать библиотеки ускорения.
Кроме того, убедитесь, что вы использовали bjam / b2 для установки boost в нужном месте. Этот каталог bin.v2 используется для создания загрузочных библиотек и не устанавливается.