2

我想为我的所有文件创建一个静态库,以便我可以将 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
4

1 回答 1

4

我相信 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,-Bdynamicand-Wl,-Bstatic错误的。-Wl,-Bstatic 禁止链接共享库。这具有选择静态 libgcc 的副作用,它隐式出现在链接器命令行的最后。而且您似乎没有安装它。大多数Linux系统都没有。
  • 每个对象都必须在它引用的库之前列在命令行上我希望mylib.a包含需要 opencv 或 opengl 的函数,因此它必须列在这些-l标志之前。
于 2012-08-08T07:13:48.310 回答