Cengiz Kandemir
Cengiz Kandemir

Reputation: 375

Source-built gcc linking error

I have Debian Wheezy and I need C++11 features to build my project. I've compiled gcc(c and c++ only) from source and put the libraries under my home folder using this question. I am also using the wrapper script supplied by the guy who answered that question which is

$HOME/gcc/gcc-4.8.4/bin/g++ -Wl,-rpath,$HOME/gcc/gcc-4.8.4/lib32 "$@"

Now, I have a game engine that I use in my project for GUI and graphic operations. It compiles in 32 bit just fine. I pass -m32 switch for all of the external libraries it uses and the engine itself. Also, in order for cmake to find my wrapper, I give following options while running cmake

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

After compilation, it gives following linking erros

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

At first, I thought I may be missing the 32-bit development libraries, so I installed following packages.

but I am getting errors, regardless. So, How can I solve this problem? I can supply additional information such as cmake files etc if needed. Thank you in advance.

EDIT

Cmake file in case if error stems from it

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's answer did the trick. I also had to install libalut-dev:i386 and link (-lalut) to successfully compile. I get many warning messages like the following (probably due to introducing additional linkage of same library)

/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)

but these are not part of this question. Thank you for your help.

Upvotes: 1

Views: 195

Answers (2)

SU3
SU3

Reputation: 5409

As @ereOn said, the linker could have optimized out some symbols. Try linking with -Wl,--no-as-needed.

Upvotes: 0

ereOn
ereOn

Reputation: 55786

It could be that the symbols that are reported missing are not used by your game engine library and were thus "optimized out" to make for a smaller binary.

Try linking your target executable explicitely with -lX11 and -lGL to see if that works.

Upvotes: 1

Related Questions