Компиляция флагов boost с явным расположением в бинарных файлах

OneRaynyDay спросил: 12 мая 2018 в 03:48 в: c++

Я компилирую проект, который нуждается в 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.

2 ответа

Есть решение
OneRaynyDay ответил: 12 мая 2018 в 04:27

У меня есть решение, но это не красиво:

Я подозреваю, что это связано с тем, что другой бинарный файл библиотеки boost указан в $LD_LIBRARY_PATH, я не мог загрузить свою собственную библиотеку в порядке приоритета, используя -L /custom/path/....

Таким образом, я сделал:

export LD_LIBRARY_PATH=/custom/path/...:$LD_LIBRARY_PATH

И он работает.

Это отнюдь не хороший ответ, потому что он не делает этот процесс сборки переносимым для пользователей без флага LD_LIBRARY_PATH. Вместо этого будут утверждены лучшие ответы.

Alexis.M ответил: 12 мая 2018 в 04:43

Похоже, вам все равно нужно предоставить опцию -L GCC. Используйте -L, чтобы сообщить компилятору, где искать библиотеки ускорения.

Кроме того, убедитесь, что вы использовали bjam / b2 для установки boost в нужном месте. Этот каталог bin.v2 используется для создания загрузочных библиотек и не устанавливается.