在gcc中链接到so库

在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,得到了相同的错误。 链接的正确方式是什么 两种解决方案: 将文件

我首先要说的是,我对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
,得到了相同的错误。 链接的正确方式是什么

两种解决方案:

  • 将文件重命名为
    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