我写了一个 SFML C++ 游戏,并试图开始使用线程,但过了一段时间一切都崩溃了。搜索后我发现修复似乎是调用 XInitThreads(); 但这以某种方式不起作用。
简化代码:
#include <X11/Xlib.h>
int main() {
XInitThreads();
//other stuff
return 1337;
}
Run Code Online (Sandbox Code Playgroud)
我尝试编译时收到的错误消息是“对符号‘XInitThreads’的未定义引用。难道头文件正在工作,但没有实现该方法的文件?
Lie*_*yan 11
“未定义的符号引用”是链接器错误,而不是编译器错误。如果您收到此消息,则编译器已将文件编译为目标文件,但无法找到包含将目标文件链接为可执行文件的函数的共享库。
如果您使用 gcc,这通常意味着您必须添加一些-l标志,如下所示:
$ gcc prog.c -lX11
Run Code Online (Sandbox Code Playgroud)
请注意,-lX11编译器参数中的顺序很重要,如果你这样做,你会得到一个错误:
$ gcc -lX11 prog.c
/tmp/ccBCxiFT.o: In function `main':
:(.text+0x5): undefined reference to `XInitThreads'
collect2: error: ld returned 1 exit status
Run Code Online (Sandbox Code Playgroud)