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

时间:2012-08-08 05:58:17

标签: 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

1 个答案:

答案 0 :(得分:4)

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

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

说明:

  • -Wl,-Bdynamic-Wl,-Bstatic标志无用。链接器会根据找到的内容自动选择静态库或动态库。如果你给它一个库的路径(就像你对mylib.a那样),它就无法选择并链接你提供的库。如果您为其提供-l X 标记,则会查找lib X .solib X .a并链接无论找到哪个,但大多数Linux安装都没有系统库的静态变体,所以没有什么可供选择。
  • 情况更糟,-Wl,-Bdynamic-Wl,-Bstatic 错误-Wl,-Bstatic 禁止链接共享库。这有选择静态libgcc的副作用,它隐含在链接器命令行上。你似乎没有安装。大多数Linux系统都没有。
  • 每个对象必须在引用的库之前的命令行中列出。我希望mylib.a包含需要opencv或opengl的函数,因此必须在-l个标志之前列出。