我已经编写了一个SFML C ++游戏,并尝试开始使用线程,但过了一段时间,一切都崩溃了。搜索后我发现修复似乎是调用XInitThreads(); 但这不会以某种方式起作用。
简化代码:
#include <X11/Xlib.h>
int main() {
XInitThreads();
//other stuff
return 1337;
}
我尝试编译时得到的错误消息是&#34;未定义对符号&#39; XInitThreads&#39;的引用。可能是头文件正在运行但是没有文件在哪里实现该方法?
答案 0 :(得分:3)
“未定义的符号引用”是链接器错误,而不是编译器错误。如果收到此消息,则编译器已将文件编译成目标文件,但无法找到包含将目标文件链接到可执行文件的函数的共享库。
如果您正在使用gcc,通常意味着您必须添加一些-l
标志,如下所示:
$ gcc prog.c -lX11
请注意编译器参数中-lX11
的顺序很重要,如果这样做会出错:
$ gcc -lX11 prog.c
/tmp/ccBCxiFT.o: In function `main':
:(.text+0x5): undefined reference to `XInitThreads'
collect2: error: ld returned 1 exit status
答案 1 :(得分:0)
您应该将链接X11库设置-lX11
添加到项目中。如果您使用Eclipse导航到 projectproperties - &gt; C / C ++ Build-&gt; Settings-&gt; Tool Settings-&gt; GCC Linker-&gt; Libraries并添加“X11”
答案 2 :(得分:0)
添加标题 -
#include<X11/Xlib.h>
使用 -
编译源代码 gcc <filename.extension> -lX11
在Ubuntu 16.04 LTS中测试