系統:我在i32芯片組上運行32位Ubuntu 12.04。在32位環境中鏈接到32位共享目標文件會生成ELFCLASS64錯誤
構建信息:我正在使用C++ 11與Qt 4.8.1和GCC。
問題:我開發依賴於內部開發庫,以下提及爲塞的項目。這些庫通過傳統的「cmake」構建到.so文件中。然後「製造全部」過程。 .so文件從cmake生成後,我將.so文件複製到我的項目的子目錄中,以便在將它們安裝到/ usr/lib之前測試它們是否正在運行。然後我爲每個庫提供Qt(在我的.pro文件中)絕對路徑並構建我的應用程序。我的應用程序找到這些本地庫並編譯時沒有錯誤或警告。然而,當我跑我的應用程序(通過命令行),我收到以下錯誤:
error while loading shared libraries: libslugSpec.so: wrong ELF class: ELFCLASS64
然而,當我建立在64位環境,並鏈接到他們的塞庫在64位環境中我的應用程序運行完美。所以,我想我爲64位環境構建.so文件,然後編輯用於構建庫的CMakeLists.txt文件。除了cuda(其依賴於slug)位標誌之外,我還添加了許多32位編譯和鏈接標誌,共享對象模塊標誌。無論我嘗試使用哪種標誌組合,生成的庫在運行我的應用程序可執行文件時都會導致錯誤。所以我決定在每個共享目標文件上運行readelf -h命令並檢查它們是否真的是64位。我發現,他們都不是,其實,所有的生產日誌類似以下內容:(輸出爲一個3個.so文件)
readelf -h libslugSpec.so
ELF Header:
Magic: 7f 45 4c 46 01 01 01 00 00 00 00 00 00 00 00 00
Class: ELF32
Data: 2's complement, little endian
Version: 1 (current)
OS/ABI: UNIX - System V
ABI Version: 0
Type: DYN (Shared object file)
Machine: Intel 80386
Version: 0x1
Entry point address: 0x10150
Start of program headers: 52 (bytes into file)
Start of section headers: 511960 (bytes into file)
Flags: 0x0
Size of this header: 52 (bytes)
Size of program headers: 32 (bytes)
Number of program headers: 7
Size of section headers: 40 (bytes)
Number of section headers: 38
Section header string table index: 35
所以現在我完全不知所措,不能似乎在任何地方找到答案。任何照明如何發生這將是一個巨大的幫助。
僅供參考,這裏有我在QT的.pro文件提供的標誌是建立我的應用程序:
QMAKE_CXXFLAGS += "-std=gnu++0x"
QT += core gui opengl
TARGET = source
TEMPLATE = app
CONFIG+= wwwidgets
#linux specific settings
unix:!macx{
LIBS += -lGLEW -lGLU /home/alex/Dropbox/brain-viz/source/lib/libslugUtil.so /home/alex/Dropbox/brain-viz/source/lib/libslugSpec.so /home/alex/Dropbox/brain-viz/source/lib/libslugSim.so
}
#windows specific settings
win32{
LIBS += -lglew32 -lwwwidgets4d
}
你完全正確!我必須將以前版本的libSlugSpec安裝到/ usr/lib中。非常感謝! – 2013-02-25 00:41:34