2011-07-07 97 views
1

讓我解釋一下。 我使用webots結合aldebaran SDK。我的操作系統是Debian Squeeze amd64。 Webots(64位)不能與aldebaran SDK一起工作,因爲它們的庫是爲32位編譯的。我沒有在64位重新編譯庫的來源。 雖然試圖編譯下webots默認NAO控制器,我得到以下錯誤:在linux 64位下與32位庫鏈接

g++ -o naoqi_for_webots
naoqi_for_webots.o naoproxy.o -L"/usr/local/webots/lib" -lController -L"/home/alex/naoqi-sdk-1.10.44-linux/lib" -lnaoqiclient /usr/bin/ld: skipping incompatible /home/vor73x/naoqi-sdk-1.10.44-linux/lib/libnaoqiclient.so when searching for -lnaoqiclient /usr/bin/ld: cannot find -lnaoqiclient

file libnaqoqiclient.so

告訴我:

libnaoqiclient.so: ELF 32-bit LSB shared object, Intel 80386, version 1 (SYSV), dynamically linked, not stripped

在webots默認的項目有一個Makefile,其中包括:

additional libraries: LIBRARIES=-L"$(AL_DIR)/lib" -lnaoqiclient

我已經下載並安裝了32位版本的webots,它與libnaoqiclient.so很好地鏈接,但不會與其他網絡庫(libController.so)鏈接,在這裏ld再次抱怨不兼容的類型。

我可以使用64bit網絡與32bit aldebaran sdk鏈接嗎? 我可以使用32位aldebaran的32位網絡連接嗎? (我應該,但我仍然有錯誤)。 如何指定ld(或通過Makefile更好)庫是32位? 或者在使用32位網絡的情況下,我如何指定我想要一個32位二進制文​​件? 我不在乎如果我的二進制文件是32位或64位,我不在乎如果我使用32位或64位版本的網絡,我只想要編譯控制器。

回答

2

那麼,你不能混合和匹配32位和64位代碼。如果您使用-m32(使其構建爲32位)編譯所有代碼,則可以使您的應用程序鏈接如果您有32位版本的所有庫可用。