trouble compiling against static library

萝らか妹 提交于 2020-01-16 06:20:11

问题


I have created a static library, libstuff.a, with gcc and ar. I've installed the library in /custom/lib/dir/ and the header files in /custom/include/dir/. When I try to compile another application against the archive, I am running into issues.

The application I am trying to compile basically uses gcc -L/custom/lib/dir/ -I/custom/include/dir/ -lstuff.

When I attempt to compile, I get error about a function I declare in stuff.h and define in stuff.c.

main.c:51: undefined reference to `stuff_init'
collect2: error: ld returned 1 exit status

If I remove libstuff.a from /custom/lib/dir/ the compiler complains /usr/bin/ld: cannot find -lstuff. If I put it back, it doen't complain. So it's finding the archive correctly.

If I remove the line of code #include "stuff.h" from main.c gcc complains about stuff_init being undefined, so it's finding the headers correctly.

If I run nm libstuff.a, the output includes 0000000000000000 T stuff_init. So the function is defined in the archive file.

So what am I doing wrong?


回答1:


You don't show your exact linking line, but the chances are you should (but don't) list the libraries after the object files:

gcc -o program main.o -L/custom/lib/dir -lstuff

If there's more than one object file outside of the libraries, then list them all before any of the libraries. The -L options may go anywhere before the -llib option that uses a library from the given directory.



来源:https://stackoverflow.com/questions/22623851/trouble-compiling-against-static-library

标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!