2015-04-17 87 views
1

我有Debian Wheezy,我需要C++ 11功能來構建我的項目。我已經從源代碼編譯了gcc(僅用於c和C++),並使用this問題將這些庫放在我的主文件夾下。我也利用這個傢伙提供的包裝腳本誰回答了這個問題這是源碼構建的gcc鏈接錯誤

$HOME/gcc/gcc-4.8.4/bin/g++ -Wl,-rpath,$HOME/gcc/gcc-4.8.4/lib32 "[email protected]" 

現在,我有我在我的項目的GUI和圖形操作使用的遊戲引擎。它在32位編譯就好了。我通過-m32切換所有它使用的外部庫和引擎本身。此外,爲了cmake的找到我的包裝,我給下面的選項,同時運行cmake的

cmake .. -DCMAKE_CXX_COMPILER=path/to/my/32-bit-wrapper 

編譯後,它提供了以下鏈接錯誤回報

undefined reference to `XOpenDisplay' 
undefined reference to `glBlendFunc' 
undefined reference to `alGenBuffers' 

起初,我以爲我可能會丟失32位開發庫,所以我安裝了以下軟件包。

  • 填實libgl1檯面-dev的:I386
  • libopenal-dev的:I386
  • 的libx11-dev的:I386

,但我得到的錯誤,不管。那麼,我該如何解決這個問題呢?如果需要,我可以提供其他信息,如cmake文件等。先謝謝你。

編輯

CMake的情況下的文件,如果錯誤源於它

cmake_minimum_required(VERSION 2.8.3) 

project(uwmf) 

set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -std=c++11 -m32 -DLINUX") 
set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -m32 -DLINUX") 
#set(CMAKE_CXX_COMPILER "${HOME_PATH}/devel/g++-4.8.4-32") 
#set(CMAKE_C_COMPILER "${HOME_PATH}/devel/gcc-4.8.4-32") 

message("${CMAKE_CXX_FLAGS}") 
message("${CMAKE_C_FLAGS}") 
message("${CMAKE_CXX_COMPILER}") 
message("${CMAKE_C_COMPILER}") 

set(CMAKE_RUNTIME_OUTPUT_DIRECTORY ${CMAKE_SOURCE_DIR}/bin) 
set(GGE ${HOME_PATH}/devel/gorgon-3.x) 
set(GRAPHICS ${HOME_PATH}/devel/graphics) 

set(SOURCES 
    src/source.cpp 
    src/algorithms.h 
    src/cloud-gen.h 
    src/latex.h 
    src/macros.h 
    src/matrix.h 
    src/utils.h  
) 

include_directories(${GGE}) 
include_directories(${GRAPHICS}) 

add_executable(uwmf ${SOURCES}) 


target_link_libraries(uwmf ${GGE}/build/libGGE.a) 

UPDATE

ereOn的答案的伎倆。我還必須安裝libalut-dev:i386和鏈接(-lalut)才能成功編譯。我得到像下面這樣的許多警告消息(可能是由於引入同一個庫的附加的鏈接)

/usr/bin/ld: Warning: type of symbol `glDrawBuffers' changed from 2 to 1 in ../devel/gorgon-3.x/build/libGGE.a(OpenGL.cpp.o) 
/usr/bin/ld: Warning: type of symbol `glGetAttribLocation' changed from 2 to 1 in ../devel/gorgon-3.x/build/libGGE.a(OpenGL.cpp.o) 

但這些都不是這個問題的一部分。感謝您的幫助。

+2

您是否100%確定這些庫已被鏈接? – user3125280

+1

對於XOpenDisplay,您需要鏈接到libX11(-lX11編譯器標誌),對於glBlendFunc,您需要鏈接到libGL,(-lGL標誌),並且對於alGenBuffers,鏈接到libopenal(-lopenal標誌)。你在做那個嗎? – nos

+0

這些庫在遊戲引擎中靜態鏈接,我正在使用(libGGE.a)和'TARGET_LINK_LIBRARIES(GGE $ {_ lib})'。我使用這個引擎編譯了許多程序,並且從不需要明確鏈接x11,libgl等。 –

回答

1

這可能是因爲您的遊戲引擎庫沒有使用報告丟失的符號,因此「優化」以製作更小的二進制文件。

嘗試鏈接您的目標可執行文件明確與-lX11-lGL看看是否有效。

0

正如@ereOn所說,鏈接器可能已經優化了一些符號。嘗試鏈接-Wl,--no-as-needed

+0

這是默認值(Ubuntu提供的gcc除外)。 –