在gcc中链接到so库
我首先要说的是,我对gcc和makefiles是新手。我在桌面上有一个.so文件(~/desktop),名为在gcc中链接到so库,gcc,linker,shared-libraries,Gcc,Linker,Shared Libraries,我首先要说的是,我对gcc和makefiles是新手。我在桌面上有一个.so文件(~/desktop),名为lib.so。我想将我的程序(称为myProgram)链接到它。我在makefile中写的是: g++ myProgram.o -L ~/Desktop -l lib -o myProgram 当我运行make时,我得到一个错误: /usr/bin/ld: cannot find -llib 我还尝试了-l lib.so,得到了相同的错误。 链接的正确方式是什么 两种解决方案: 将文件
lib.so
。我想将我的程序(称为myProgram)链接到它。我在makefile中写的是:
g++ myProgram.o -L ~/Desktop -l lib -o myProgram
当我运行make
时,我得到一个错误:
/usr/bin/ld: cannot find -llib
我还尝试了-l lib.so
,得到了相同的错误。
链接的正确方式是什么 两种解决方案:
libsomething.so
,然后使用-l something
。链接器会自动使用lib
前缀和.so
后缀(或静态库的后缀)包装名称
-l:lib.so
。在名称前面加上:
前缀时,链接器将使用给定的名称这些都在
ld
手册页中解释。当您使用-l foo
时,它会查找libfoo.so
。所以-lib
正在寻找liblib.So
。谢谢你,成功了。您应该将此作为答案来编写。我不确定如何让它找到lib.so
,因为它不遵循命名约定。没关系,我将文件名更改为libBenjy.so,并与Benjy链接,结果成功了。另一个快速问题是,在运行应用程序时,我遇到一个错误“无法打开共享对象文件:没有这样的文件或目录”. 我如何告诉他在运行时使用load the library?目录应该在您的LD_library_PATH环境变量中。出于某种原因,我没有LD_library_PATH环境变量,但我不会再麻烦您了。您只需要在非标准位置查找库时使用该变量。您可以向可执行文件添加rpath。执行exe时,这种方式将查看此路径(除LD_LIBRARY_路径外)。您可以这样添加rpath:gcc-Wl,-rpath=/path/to/sharedlibrary/folder