0

我使用configure, make, make install. 我的电脑是

[esolve@kitty esolve]$ uname -r
3.6.10-2.fc16.x86_64

我写了一个使用 libevent 的程序。由于我想将此程序分发到许多未安装 libevent 的远程主机。所以我想静态编译程序,使用

gcc -o myprogram mypro.c /usr/local/lib/libevent.a -lpcap -lrt

现在我注意到一些远程机器是 32 位的,而不是 64 位的

所以我想用来-m32编译

gcc -m32 -o myprogram mypro.c /usr/local/lib/libevent.a -lpcap -lrt

但我得到了错误:

/usr/bin/ld: i386:x86-64 architecture of input file `/usr/local/lib/libevent.a(event.o)' is incompatible with i386 output
/usr/bin/ld: i386:x86-64 architecture of input file `/usr/local/lib/libevent.a(log.o)' is incompatible with i386 output
/usr/bin/ld: i386:x86-64 architecture of input file `/usr/local/lib/libevent.a(evutil.o)' is incompatible with i386 output
/usr/bin/ld: i386:x86-64 architecture of input file `/usr/local/lib/libevent.a(select.o)' is incompatible with i386 output
/usr/bin/ld: i386:x86-64 architecture of input file `/usr/local/lib/libevent.a(poll.o)' is incompatible with i386 output
/usr/bin/ld: i386:x86-64 architecture of input file `/usr/local/lib/libevent.a(epoll.o)' is incompatible with i386 output
/usr/bin/ld: i386:x86-64 architecture of input file `/usr/local/lib/libevent.a(signal.o)' is incompatible with i386 output
collect2: ld returned 1 exit status

有什么解决方法吗?谢谢!

4

1 回答 1

1

如果你想在 32 位模式下使用你自己的编译库(例如libevent),你应该configure让它CC='gcc -m32'在 32 位模式下编译。

如果您想同时拥有同一个库的 32 位和 64 位版本,您应该使用不同的configure选项构建库两次(不要忘记make clean在构建之间),也许更改--prefix--libexec-prefix

您还可以考虑在您的chroot-ed 环境中使用完整的 32 位分布(然后您需要bind安装一些目录,例如/proc,/dev等...)。

于 2013-06-17T18:06:36.493 回答