我正在尝试使用 liboidc-agent (Github) 这是编译好的静态库。
我认为它编译错误,因为当我尝试编译我的程序并链接库时,请参阅下面的日志。
注意:/home/gabriel/Dokumente/... 不是我的目录。但最有可能是开发人员的目录。它不应该在那里,对吧?库应该是可重复使用的代码包。
如何解决这个问题并使 liboidc-agent 可用? Minimal example (Github) 只需运行“make”
还是我遗漏了什么? 谢谢你的帮助!
make
gcc -o main main.c -L. -I. -loidc-agent
./liboidc-agent.a(api.o): In function `oidc_serror':
/home/gabriel/Dokumente/git-repo/oidc-agent/src/oidc_error.h:95: undefined reference to `oidc_sprintf'
/home/gabriel/Dokumente/git-repo/oidc-agent/src/oidc_error.h:97: undefined reference to `clearFreeString'
./liboidc-agent.a(api.o): In function `getAccountRequest':
/home/gabriel/Dokumente/git-repo/oidc-agent/src/api.c:12: undefined reference to `oidc_sprintf'
./liboidc-agent.a(api.o): In function `getAccessTokenRequest':
/home/gabriel/Dokumente/git-repo/oidc-agent/src/api.c:16: undefined reference to `isValid'
/home/gabriel/Dokumente/git-repo/oidc-agent/src/api.c:19: undefined reference to `oidc_sprintf'
./liboidc-agent.a(api.o): In function `communicate':
/home/gabriel/Dokumente/git-repo/oidc-agent/src/api.c:27: undefined reference to `ipc_init'
/home/gabriel/Dokumente/git-repo/oidc-agent/src/api.c:30: undefined reference to `ipc_connect'
/home/gabriel/Dokumente/git-repo/oidc-agent/src/api.c:33: undefined reference to `ipc_vwrite'
/home/gabriel/Dokumente/git-repo/oidc-agent/src/api.c:34: undefined reference to `ipc_read'
/home/gabriel/Dokumente/git-repo/oidc-agent/src/api.c:35: undefined reference to `ipc_close'
/home/gabriel/Dokumente/git-repo/oidc-agent/src/api.c:37: undefined reference to `printError'
./liboidc-agent.a(api.o): In function `getAccessToken':
/home/gabriel/Dokumente/git-repo/oidc-agent/src/api.c:58: undefined reference to `clearFreeString'
/home/gabriel/Dokumente/git-repo/oidc-agent/src/api.c:66: undefined reference to `getJSONValues'
/home/gabriel/Dokumente/git-repo/oidc-agent/src/api.c:67: undefined reference to `printError'
/home/gabriel/Dokumente/git-repo/oidc-agent/src/api.c:68: undefined reference to `clearFreeString'
/home/gabriel/Dokumente/git-repo/oidc-agent/src/api.c:71: undefined reference to `clearFreeString'
/home/gabriel/Dokumente/git-repo/oidc-agent/src/api.c:75: undefined reference to `clearFreeString'
/home/gabriel/Dokumente/git-repo/oidc-agent/src/api.c:76: undefined reference to `clearFreeString'
/home/gabriel/Dokumente/git-repo/oidc-agent/src/api.c:77: undefined reference to `clearFreeString'
./liboidc-agent.a(api.o):/home/gabriel/Dokumente/git-repo/oidc-agent/src/api.c:80: more undefined references to `clearFreeString' follow
./liboidc-agent.a(api.o): In function `getLoadedAccounts':
/home/gabriel/Dokumente/git-repo/oidc-agent/src/api.c:103: undefined reference to `getJSONValues'
/home/gabriel/Dokumente/git-repo/oidc-agent/src/api.c:104: undefined reference to `printError'
/home/gabriel/Dokumente/git-repo/oidc-agent/src/api.c:105: undefined reference to `clearFreeString'
/home/gabriel/Dokumente/git-repo/oidc-agent/src/api.c:108: undefined reference to `clearFreeString'
/home/gabriel/Dokumente/git-repo/oidc-agent/src/api.c:112: undefined reference to `clearFreeString'
/home/gabriel/Dokumente/git-repo/oidc-agent/src/api.c:113: undefined reference to `clearFreeString'
/home/gabriel/Dokumente/git-repo/oidc-agent/src/api.c:114: undefined reference to `clearFreeString'
./liboidc-agent.a(api.o):/home/gabriel/Dokumente/git-repo/oidc-agent/src/api.c:117: more undefined references to `clearFreeString' follow
collect2: error: ld returned 1 exit status
Makefile:2: recipe for target 'main' failed
make: *** [main] Error 1
最佳答案
.a
文件只是一个包含多个捆绑在一起的 .o
文件的存档,以及一个可选的符号索引。并且 .o
文件确实引用了源文件,因此错误更精确 - 否则你只会从 api.o
而不是实际的源文件中得到错误它来自哪里。
真正的问题是整个 liboidc-agent.a
只是垃圾。如果您查看文件列表:
% ar t liboidc-agent.a
api.o
api.o
api.o
api.o
api.o
api.o
api.o
api.o
api.o
api.o
api.o
api.o
api.o
api.o
api.o
api.o
api.o
它没有多个不同的目标文件,而是具有多个副本的相同文件。与存储库所在的用户唠叨,从另一个地方获取库或自己从源代码构建它。
关于c - 为什么 C 的编译 stderr 包含我正在使用的静态库的开发人员的密码?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52534000/