【发布时间】:2015-04-09 23:15:46
【问题描述】:
我有这个程序是用 C 代码编写的。它是 hsetroot 的一个分支。我接受了它,然后向它添加了更多选项,以便可以操纵设置到桌面的图像和颜色。用户对它有更多的控制权。它编译和安装没有任何错误。
我是在 32 位 Debian Linux 操作系统上完成的。然后我出去给我买了一台双核 64 位笔记本电脑(50 美元)安装 Linux 64 位。把我的程序拿出来清理一下,也许再清理一下,只是为了 GP(通用)。
当我尝试在命令行上编译它时,我现在遇到错误,它将不再编译。代码没有任何改变。因此不会出现错误。
尽管如此,我还是收到了这个错误,但它无法完全编译。更有趣的是,如果我使用 -m32 arg 我会得到一个不同的编译失败错误,然后如果我使用或不使用 -m46 arg。
我使用带有或不带有 -m64 参数的这个命令进行编译,然后得到以下错误。
gcc `imlib2-config --cflags` `imlib2-config --libs` mhsetroot-v1.6.2.c -o myapp
然后得到这个错误
/usr/bin/ld: /tmp/cclrRrBO.o: undefined reference to symbol 'XClearWindow'
//usr/lib/x86_64-linux-gnu/libX11.so.6: error adding symbols: DSO
missing from command line collect2: error: ld returned 1 exit status
它告诉我 XClearWindow 没有在头文件中定义。 /usr/include/X11/xlib.h
extern int XClearWindow(
Display* /* display */,
Window /* w */
当我使用 -m32 参数编译它时,我得到了这个错误
/development/c/mhsetroot$ gcc -m32 `imlib2-config --cflags` `imlib2- config --libs` mhsetroot-v1.6.2.c -o myapp
我收到这个错误
In file included from mhsetroot-v1.6.2.c:29:0:
/usr/include/X11/Xlib.h:38:23: fatal error: sys/types.h: No such file or directory #include <sys/types.h>
现在用 sys/types.h 说明问题 --
什么给出了 - 从我在 32 位 Linux 操作系统上执行此操作没有问题时,代码从未更改过。但现在在这个 64 位 Linux 操作系统上我遇到了问题。真正的问题是什么?因为这不是我的代码。
【问题讨论】:
-
undefined reference错误不是编译错误,而是链接错误。它与标题无关,但意味着您需要将库添加到链接行。您可能需要检查imlib2 --libs的输出,看看它给了您什么。 -
在我看来这是一个新问题(对我来说),因为在 32 位中,这个链接现在不需要添加到命令行上的 args 中,在 64 位中是这样,现在我在哪里需要在命令行参数中添加 -lX11 @Useless 谢谢它现在可以工作了
-
如果已解决,请关闭问题或添加答案并将其标记为已接受。
-
请不要在问题标题中添加“SOLVED”。表明您的问题已解决的方法是接受答案。如果没有现有答案可以解决问题,您可以发布自己的答案并接受。
-
我这样做了,然后这个论坛告诉我,我不能接受我自己的答案,直到第二天我才知道事实——所以有人在我发布我的答案时甚至没有检查决定把所有我的上帝都放在我身上 - 这是我知道的唯一一个不添加 SOLVED 的不同规则的地方,因此人们可以看到它以供快速参考以首先检查该规则