LINUX.ORG.RU

Компилятор ищет пути библиотек не там, куда я ему указал

 , , ,


0

1

в общем имеется арч, собираемая прога
вывод процесса компиляции:

`--> LC_ALL=C make -f makefile.unix BDB_INCLUDE_PATH=/usr/include/db4.8 OPENSSL_INCLUDE_PATH=/usr/include/openssl-1.0 OPENSSL_LIB_PATH=/usr/lib/openssl-1.0 CC=gcc-4.3 CXX=g++-4.3 BOOST_INCLUDE_PATH=/usr/include/boost37/boost BOOST_LIB_PATH=/usr/lib/boost37 BDB_LIB_SUFFIX="-4.8" USE_UPNP= -j5                 
/bin/sh ../share/genbuild.sh obj/build.h
g++-4.3 -O2 -pthread -Wall -Wextra -Wformat -Wformat-security -Wno-unused-parameter -g -DBOOST_SPIRIT_THREADSAFE -D_FILE_OFFSET_BITS=64 -I/home/safff/git/cannabiscoin420/src -I/home/safff/git/cannabiscoin420/src/obj -I/usr/include/boost37/boost -I/usr/include/db4.8 -I/usr/include/openssl-1.0 -DUSE_IPV6=1 -I/home/safff/git/cannabiscoin420/src/leveldb/include -I/home/safff/git/cannabiscoin420/src/leveldb/helpers -DHAVE_BUILD_INFO -fno-stack-protector -fstack-protector-all -Wstack-protector -D_FORTIFY_SOURCE=2  -o CannabisCoind leveldb/libleveldb.a obj/alert.o obj/version.o obj/checkpoints.o obj/netbase.o obj/addrman.o obj/crypter.o obj/key.o obj/db.o obj/init.o obj/keystore.o obj/main.o obj/net.o obj/protocol.o obj/bitcoinrpc.o obj/rpcdump.o obj/rpcnet.o obj/rpcmining.o obj/rpcwallet.o obj/rpcblockchain.o obj/rpcrawtransaction.o obj/script.o obj/sync.o obj/util.o obj/wallet.o obj/walletdb.o obj/hash.o obj/bloom.o obj/noui.o obj/leveldb.o obj/txdb.o obj/cubehash.o obj/luffa.o obj/aes_helper.o obj/echo.o obj/shavite.o obj/simd.o obj/blake.o obj/bmw.o obj/groestl.o obj/jh.o obj/keccak.o obj/skein.o obj/checkpointsync.o -Wl,-z,relro -Wl,-z,now  -L/usr/lib/boost37 -L/usr/lib/openssl-1.0 -Wl,-Bdynamic -l boost_system -l boost_filesystem -l boost_program_options -l boost_thread -l db_cxx-4.8 -l ssl -l crypto -Wl,-Bdynamic -l z -l dl -l pthread /home/safff/git/cannabiscoin420/src/leveldb/libleveldb.a /home/safff/git/cannabiscoin420/src/leveldb/libmemenv.a
/usr/bin/ld: obj/alert.o: undefined reference to symbol 'boost::system::system_category()'
/usr/lib/libboost_system.so.1.64.0: error adding symbols: DSO missing from command line
collect2: ld returned 1 exit status
make: *** [makefile.unix:186: CannabisCoind] Error 1

интересует именно строка
/usr/lib/libboost_system.so.1.64.0: error adding symbols: DSO missing from command line
в которой видно откуда берет линкуемую либу компилятор, но ведь насильно указана либа boost37
BOOST_LIB_PATH=/usr/lib/boost37
почему он не линкует из ентого пути и как его все же уговорить енто делать?


cannabiscoin420

Роскомнадзора на тебя нет.

PPP328 ★★ ()
Ответ на: комментарий от PPP328

чо значит ентот ответ?
если типа путь либ нет в строке параметров компиляцтии, то нет, он есть

-L/usr/lib/boost37
при чем как раз пути /usr/lib нету в строке параметров компилятора, но он оттуда берет все же

safocl ()
Последнее исправление: safocl (всего исправлений: 1)
Ответ на: комментарий от PPP328

при чем тут роскомпозор? роскомпазор ващето не блочит криптовалюты, использование крипты не является противозаконным, даже если бы являлось, никто бы не смог енто фактически запретить или отследить, по ентому властям приходится мириться, да и при чем уже в россии внедряются методы на основе криптовалют, в банках и т.д. скора как и в других евро странах будут биткойн банкоматы

safocl ()

сча попробую пересобрать boost37 чобы либы копировались в /usr/lib под нужным суффиксом версии, мб если они не находятся в ld то и не будут находить компилятором для их линковки? хатя странна, я же все же в ручную указал чо либы находятся именно в /usr/lib/boost37

safocl ()
Ответ на: комментарий от safocl

нет, безрезультатна, почему то снова находит именно 1.64.0 версию либ, как указать чо именно с нужной папки либы брать надо для линковки?

safocl ()
Ответ на: комментарий от PPP328

а где же тут пропаганда? да и при чем тут роскомпазор?

safocl ()
Ответ на: комментарий от PPP328

роскомпазор даже не орган государственной власти, он ваще ничо не может.
чо бы он чото делал нужно решение того или иного органа власти... в большинстве сулчаев енто суды или прокуратура

safocl ()

блин, я кажется понял в чем загвоздка.

1.37.0 по умолчанию собирается с двумя версиями либ — мультитреадинговые и нет. так вот наверна не находил потому чо нужна была мультитреадинговая либа, а она с суффиксом -mt , поставил ентот суффикс в команду сборки и все залинковалось.

наверна не найдя енту мтешную либу компилятор переключался на стандартную, которая уже изначально мультитреадинговая, ибо уже не собираются в двух вариантах давно, а я не менял ентого в сборке boost 1.37.

safocl ()
Ответ на: комментарий от safocl

/usr/lib - это путь по умолчанию.
По моему, тебе надо удалить все опции -I (они ненужны линкеру и только засоряют строку) и перенести опции -L до первого o-файла. Похоже - у тебя линкер находит boost в стандартных путях до момента указания подкаталога через -L

sigurd ★★★ ()
Последнее исправление: sigurd (всего исправлений: 1)
Ответ на: комментарий от sigurd

ок, а как енто сделать? в мейкфайле?
если не затруднит, можешь привести пример чо исправить на примере того мейкфайла файла, которым я собираю прогу?

ссылка есть на гитхаб в самой первой строке первого поста

я просто не пойму как енто все сделать

safocl ()
Ответ на: комментарий от sigurd

ну при чем так то должен искать сначала в указанных насильно местах, а потом в /usr/lib? так же?

safocl ()
Ответ на: комментарий от safocl

линкер обрабатывает файлы последовательно - найдя первый o-файл, линкер обработал его используя только пути по умолчанию
\ Перенеси все опции -L в начало строки (сразу за g++) и удали ненужные -I (-i нужны только компилятору, линкер их пропускает)

sigurd ★★★ ()
Последнее исправление: sigurd (всего исправлений: 3)
Ответ на: комментарий от sigurd

т.е. мне надо удалить

 31 LIBS += \
 32  -Wl,-B$(LMODE) \
 33    -l boost_system$(BOOST_LIB_SUFFIX) \
 34    -l boost_filesystem$(BOOST_LIB_SUFFIX) \
 35    -l boost_program_options$(BOOST_LIB_SUFFIX) \
 36    -l boost_thread$(BOOST_LIB_SUFFIX) \
 37    -l db_cxx$(BDB_LIB_SUFFIX) \
 38    -l ssl \
 39    -l crypto

из мейкфайла?

safocl ()
Ответ на: комментарий от safocl

Нет -нет! Речь идет не про -l liba (l-маленькая), а про -I path ( i-большое)

sigurd ★★★ ()
Последнее исправление: sigurd (всего исправлений: 1)
Ответ на: комментарий от sigurd

ну а как же я их удалю, тогда папки с хеадерами будут браться не нужных версий, будет браться актуальная версия хеадеров, а версии которой нужно (более старой).

safocl ()
Ответ на: комментарий от safocl

Я бы попробовал заменить

CannabisCoind: $(OBJS:obj/%=obj/%)
$(LINK) $(xCXXFLAGS) -o $@ $^ $(xLDFLAGS) $(LIBS)
на

$(LINK) $(xLDFLAGS) $(LIBS) -o $@ $^

sigurd ★★★ ()
Ответ на: комментарий от safocl

У тебя приведена строка линковки! Линкеру не нужны хидеры! Он работает только с о-файлами и либами

sigurd ★★★ ()
Ответ на: комментарий от sigurd

но он мне ссылается на ошибки в хедерах тоже, значит он их задействовает

safocl ()
Ответ на: комментарий от safocl

Я конечно не проверял - но намеренно убрал - ненужны линкеру опции компилятора!

-O2 -pthread -Wall -Wextra -Wformat -Wformat-security -Wno-unused-parameter -g -DBOOST_SPIRIT_THREADSAFE -D_FILE_OFFSET_BITS=64 -I/home/safff/git/cannabiscoin420/src -I/home/safff/git/cannabiscoin420/src/obj -I/usr/include/boost37/boost -I/usr/include/db4.8 -I/usr/include/openssl-1.0 -DUSE_IPV6=1 -I/home/safff/git/cannabiscoin420/src/leveldb/include -I/home/safff/git/cannabiscoin420/src/leveldb/helpers -DHAVE_BUILD_INFO -fno-stack-protector -fstack-protector-all -Wstack-protector -D_FORTIFY_SOURCE=2
- это ненужный мусор для линкера!

sigurd ★★★ ()
Последнее исправление: sigurd (всего исправлений: 1)
Ответ на: комментарий от sigurd

как мне заллогировать вывод компиляции? пишу >log.txt — логинится все кроме ошибок, а ошибки в терминале

safocl ()
Последнее исправление: safocl (всего исправлений: 1)
Ответ на: комментарий от safocl

2>&1 >log.txt или
2>&1 | tee -a log.txt
так будет одновременно на экран и в файл

sigurd ★★★ ()
Ответ на: комментарий от Samsky

да, я понял, но как мне перенаправить все в лог файл?

хатя уже сам похоже сделал

gcc some.cpp 1>log.txt 2>log.txt

safocl ()
Ответ на: комментарий от Samsky

https://ptpb.pw/xK28

вот чо ваще сча выдает, почему то все норм было, даже не пойл я когда все само стало по другому...
почему то в логе видно чо он обращается сначала в /usr/include/boost, а не в /usr/include/boost37/boost, как я ему указываю

safocl ()
Ответ на: комментарий от Samsky
LC_ALL=C make -f makefile.unix BDB_INCLUDE_PATH=/usr/include/db4.8 OPENSSL_INCLUDE_PATH=/usr/include/openssl-1.0 OPENSSL_LIB_PATH=/usr/lib/openssl-1.0 CC=gcc-4.3 CXX=g++-4.3 BOOST_INCLUDE_PATH=/usr/include/boost37 BOOST_LIB_PATH=/usr/lib/boost37 BDB_LIB_SUFFIX="-4.8" USE_UPNP= -j5


вот строка запуска

safocl ()
Ответ на: комментарий от safocl

хмм. ваще файлы которые не с boost37 взяты не существуют в boost37 пути почему то.

safocl ()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.