c++ - 编译静态库时 GCC 链接器错误

标签 c++ gcc static-linking

我想为我的所有文件创建一个静态库,以便我可以将 mylib.a 文件提供给其他人在他们的系统上执行。我在代码中使用 opencv 库。我使用以下命令来编译我的代码。

g++ index.cpp -o display1 -Wl,-Bdynamic pkg-config --cflags --libs opencv -lglut -lGL -lGLU -Wl,-Bstatic mylib.a

但它给出了以下错误。

/usr/bin/ld: cannot find -lgcc_s
collect2: ld returned 1 exit status

最佳答案

我相信 Kerrek SB 的评论是正确的。命令应该是

g++ index.cpp -o display1 mylib.a $(pkg-config --cflags --libs opencv) -lglut -lGL -lGLU

说明:

  • -Wl,-Bdynamic-Wl,-Bstatic 标志没有用。链接器根据它找到的内容自动选择静态或动态库。如果你给它一个库的路径(就像你对mylib.a所做的那样),它就无法选择并会链接你提供的库。如果您给它一个 -lX 标志,它将查找 libX.solibX.a 并链接它找到的任何一个,但大多数 Linux 安装不会有系统库的静态变体,因此两者都没有什么可以选择的。
  • 更糟糕的是,-Wl,-Bdynamic-Wl,-Bstatic错误-Wl,-Bstatic 禁止链接共享库。这具有选择静态 libgcc 的副作用,它隐式地出现在链接器命令行的最后。而且你好像没有安装这个。大多数 Linux 系统都没有。
  • 每个对象都必须列在命令行上它所引用的库之前。我希望 mylib.a 包含需要 opencv 或 opengl 的函数,因此它必须列在那些 -l 标志之前。

关于c++ - 编译静态库时 GCC 链接器错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11858480/

相关文章:

c++ - boost::thread undefined reference

c++ - 关于 C++ 编译器的几个问题 : GCC, MSVC、Clang、Comeau 等

c - 静态链接lua库后符号丢失

linux - 静态链接库默认入口点

c++ - 数组作为参数

c++ - 错误:'std::cout 中的 'operator<<"不匹配

c++ - 如何消除来自 GCC 的长整型常量警告

c - 升级到Mavericks,C编译器无法创建可执行文件

c++ - 将 sdl 与 g++ 链接时出现错误

c++ - 将带有参数的程序输出重定向到文件