如何在编译期间解决共享库链接(GCC)?

时间:2009-12-18 06:45:16

标签: gcc linker shared-libraries

我已经构建 libshared.so ,依赖于 libshared_dependent.so

现在,我正在编译使用 libshared.so app.bin ,现在在编译时gcc要我指定 -lshared_dependent 另外,它给出了一些未找到符号的错误。

有没有办法,在编译时我不需要指定 -lshared_dependent ,我想只指定 -lshared 吗?

2 个答案:

答案 0 :(得分:4)

在生成libshared.so时,您只需要将libshared.so链接到libshared_dependent.so。

gcc -shared -o libshared.so -lshared_dependant file1.o file2.o 

这样,当您将应用程序链接到libshared.so时,它还会链接到libshared.so依赖的任何内容

答案 1 :(得分:1)

您不需要将app.bin链接到libshared_dependent.so。

也就是说,链接器将要验证libshared.so中的符号是否可以找到,因此需要找到libshared_dependent.so才能执行此操作。如果libshared_dependent.so与libshared.so位于不同的目录中,则需要使用链接器选项-rpath-link指定libshared_dependent.so的路径。

因为-rpath-link是一个链接器选项,所以你需要告诉gcc将它传递给链接器:

gcc -Wl,-rpath-link,/directory-that-libshared_dependent-is-in