Gcc / ld警告" liba"需要" libb",找不到,但是rpath的一部分

时间:2017-08-06 12:46:39

标签: gcc ld

我从ld收到一些关于未找到的图书馆的警告,但据我所知,它应该找到它们。例如:

/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。如果我在build/libleaf_lang.so上执行ldd,则可以找到有问题的库:

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