GCC 共享库问题

Tre*_*key 3 c++ ubuntu gcc shared

我正在尝试使用gcc在ubuntu上创建一个共享库
我只有一个简单的类(shared.h和shared.cpp)和一个使用它的客户端(main.cpp)
这是我的makefile,我仍然无法来编译程序。

all:
    #compile object(fPIC: creates position independent code)
    gcc -fPIC -Wall -g -c shared.cpp

    #compile shared library
    gcc -shared -Wl,-soname,libshared.so.1 -o libshared.so.1.0.1 shared.o -lc

    #link shared library
    gcc -g -o main main.cpp -L. -lshared
Run Code Online (Sandbox Code Playgroud)
  • 我确信第一行是正确的
  • 我不确定“-lc”的作用。我认为它会将一些东西传递给链接器?
  • 我不想安装该库,我只想能够从当前目录链接它。我已经尝试过:export LD_LIBRARY_PATH=.
    但似乎没有什么区别。一切都在当前目录中。

    错误:/usr/bin/ld:找不到 -lshared

如何让编译器检查我的库的当前目录?

Dav*_*e S 5

问题不在于它没有在目录中查找,问题在于您已将库命名为“libshared.so.1.0.1”。当您使用 -lshared 时,它会在库搜索路径中查找名为“libshared.so”或“libshared.a”的文件。

大多数时候,在使用版本控制的系统库时,即使您已经安装了“libshared.so.1”或“libshared.so.1.0.1”,您也会提供最新版本的链接“libshared.so” 。

在您的情况下,如果您继续保留名为“libshared.so.1.0.1”的文件,您将需要创建 2 个符号链接:

  1. libshared.so - 以便可以使用 ld 找到该库
  2. libshared.so.1 - 由于您在构建时将 SO 名称声明为 libshared.so.1,因此您需要提供此链接,否则,可执行文件将无法在运行时找到正确的共享库。