【问题标题】:How to choose between shared and static library?如何在共享库和静态库之间进行选择?
【发布时间】:2013-07-13 18:58:18
【问题描述】:

我正在尝试在 Linux 中运行 SFML 库中的标准示例。我已经从 Github 下载了 Rep.,使用 CMake 构建和安装它。我为静态/共享调试构建了 2 个库,为静态/共享发布构建了 2 个库。

现在的问题,我对在终端中编译不太了解。我使用在 SFML 网站上找到的命令:

g++ -c test.cpp

g++ test.o -o sfml-app -lsfml-graphics -lsfml-window -lsfml-system

这行得通。我可以通过 ./sfml-app 运行我的 SFML 应用程序并双击。但是其他使用 Linux 的人(没有安装 SFML)不能。我认为这是因为编译器不使用静态库。当然——他怎么可能?它没有写在命令中。但是我也不知道怎么写。

静态发布库的名称例如

libsfml-graphics-s.a

libsfml-window-s.a

libsfml-system-s.a

我必须用 g++ 写什么,他在链接这些东西时正在使用这个库?

【问题讨论】:

    标签: c++ linux g++ sfml


    【解决方案1】:

    要将您的程序与库的静态版本链接,您需要执行以下操作:

    g++ test.o -o sfml-app libsfml-graphics-s.a libsfml-window-s.a libsfml-system-s.a
    

    (当然,假设这些文件在您的本地目录中。)

    【讨论】:

    • 首先感谢四位您的回答。但问题并没有解决。如果我这样做,他说他找不到 libsfml-graphics-s.a 和其他人。但是它们肯定存在于 usr/local/lib 中,并且 cmake 也表示它们已安装。
    • 那么你必须在三个文件之前添加 /usr/local/lib/ : g++ test.o -o sfml-app /usr/local/lib/libsfml-graphics.a 。 ..
    • g++ test.o -o sfml-app /usr/local/lib/libsfml-graphics-sa /usr/local/lib/libsfml-window-sa /usr/local/lib/libsfml- system-sa 会导致很多错误。
    • 有什么错误?它们是否与未找到的文件有关,还是与其他有关?
    • 很多,这只是一些: GlxContext.cpp:(.text+0x555): 未定义引用 glXGetConfig' GlxContext.cpp:(.text+0x56b): undefined reference to glXGetConfig' GlxContext.cpp:(.text+0x57f): 未定义引用glXGetConfig' GlxContext.cpp:(.text+0x595): undefined reference to glXGetConfig' GlxContext.cpp:(.text+0x5bb): undefined reference to `XFree' 我知道这个错误,我过去在 Code::Blocks 中有这个错误。这就是我不再使用 IDE 的原因之一^^
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-05-11
    • 2020-11-20
    • 2011-07-23
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多