c - 为什么 C 的编译 stderr 包含我正在使用的静态库的开发人员的密码?

标签 c gcc makefile linker static-libraries

我正在尝试使用 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/

相关文章:

c - 如何在 C 中将字符串拆分成固定长度的小块以从 Arduino BLE 发送?

c# - Visual Studio 查看 DLL 中的 StandardOuptut 流

c++ - 使用 Caffe 运行简单的 C++ 程序

gcc arm -- 确保使用内联 asm 语句内联函数时保留参数

C Makefile 给出具有多个定义的链接器错误

c - 是否可以制作停靠在屏幕顶部的应用程序?

程序异常终止导致的 C 潜在内存泄漏

c - gcc 中的 -ffreestanding 选项是什么?

makefile - 覆盖 makefile 中的 `CC` 和 `CXX` 变量

C 库、makefile 头依赖项