我從ld
得到了一些關於找不到的庫的警告,但據我所知它應該找到他們。例如:「libb」需要GCC/ld警告「liba」,找不到,但是rpath的一部分
/usr/bin/ld: warning: libleaf_util.so, needed by build/libleaf_lang.so, not found (try using -rpath or -rpath-link)
這發生在我鏈接可執行build/unit_test
,其包括build/libleaf_lang.so
,作爲命令行(1)的一部分。鏈接將rpath=$ORIGIN
添加到可執行文件和所有庫,包括庫build/libleaf_lang.so
。如果我做LDD上build/libleaf_lang.so
它能夠找到庫中的問題:
libleaf_util.so => /home/src/leaf/misc/build/libleaf_util.so (0x00007fd7c2f90000)
這似乎表明所需的庫中找到。那麼爲什麼我會收到警告?
請注意,這似乎只發生在我使用共享庫的路徑build/libleaf_lang.so
進行鏈接時。如果我按照名稱-lleaf_lang
鏈接,就像我爲其他可執行文件所做的那樣,我不會收到警告。
(1)g++ -o build/unit_test -z origin -Wl,-rpath=\$ORIGIN build/boost_test_main.o build/test/expr_conversion_test.o build/test/statement_test.o build/test/expr_type_test.o build/test/full_type_test.o build/test/gmp_test.o build/test/intr_type_parse_test.o build/test/lambda_test.o build/test/number_test.o build/test/object_holder_test.o build/test/parse_test.o build/test/scope_test.o build/test/source_test.o build/test/type_converter_cost.o build/test/type_converter_fixate.o build/test/type_converter_function_call.o build/test/type_converter_match_function.o build/test/type_converter_parameterize_type.o build/test/type_converter_test.o build/test/type_converter_unify.o build/test/type_identifier_constrain.o build/test/type_identifier_determine.o build/test/type_identifier_expand.o build/test/type_identifier_get_spec.o build/test/type_identifier_infer.o build/test/unicode_test.o build/libleaf_lang.so build/libleaf_parser.so build/libleaf_util.so build/libleaf_runner.so build/libleaf_ir.so build/libleaf_ir_llvm.so -Lbuild/build/lib -Lsrc/build/lib -L/usr/lib -Lbuild -Lsrc -L/opt/llvm/install/lib -L/usr/lib -lboost_unit_test_framework -lboost_program_options -lrt -ldl -lboost_regex -lLLVM-3.8 -lgmp -lgmpxx -lboost_filesystem -lboost_system
也許嘗試'-rpath = \「$ ORIGIN \」'... –
@ l'L l rpath位正在工作。生成的庫/可執行文件已正確設置。該命令是從構建過程輸出中複製的,而不是直接給予bash的。 –
您使用的是哪個平臺/操作系統? –