我想创建一个包含所有文件的静态库,以便我可以将我的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
答案 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 .so
或lib
X .a
并链接无论找到哪个,但大多数Linux安装都没有系统库的静态变体,所以没有什么可供选择。-Wl,-Bdynamic
和-Wl,-Bstatic
错误。 -Wl,-Bstatic
禁止链接共享库。这有选择静态libgcc的副作用,它隐含在链接器命令行上。你似乎没有安装。大多数Linux系统都没有。mylib.a
包含需要opencv或opengl的函数,因此必须在-l
个标志之前列出。