statisticalbiotechnology / quandenser

QUANtification by Distillation for ENhanced Signals with Error Regulation
Apache License 2.0
9 stars 1 forks source link

Build issues on ubuntu #22

Open kesinger opened 2 years ago

kesinger commented 2 years ago

I'm trying to build quandenser, and am running into linking errors. Typical messages are:

/usr/bin/ld: /home/user/outside/build/ubuntu64/tools/lib/libpwiz_data_msdata_core.a(References.o): relocation R_X86_64_32S against hidden symbol _ZN5boost6detail15sp_counted_base7destroyEv' can not be used when making a PIE object /usr/bin/ld: /home/user/outside/build/ubuntu64/tools/lib/libpwiz_data_msdata_core.a(SpectrumWorkerThreads.o): relocation R_X86_64_32 against symbol__pthread_key_create@@GLIBC_2.2.5' can not be used when making a PIE object; recompile with -fPIC

There are several dozen such messages, all for libboost and libpwiz.

I'm also getting 'final link failed:Symbol needs debug section which does not exist' and undefined references to pwiz in libaraclusterlibrary.a's 'SpectrumHandler.cpp.o'.

MatthewThe commented 2 years ago

Are you using the quickbuild.sh or admin/builders/ubuntu64_build.sh scripts, or are you running CMake directly?

Looks like the ProteoWizard and Boost libraries were compiled without "Position Independent Code" enabled. You can check if this is the case by running:

objdump -r /home/user/outside/build/ubuntu64/tools/lib/libpwiz_data_msdata_core.a

If there are no relocation records (https://stackoverflow.com/questions/3507296/is-there-a-way-to-determine-that-a-a-or-so-library-has-been-compiled-as-positi) this means that something went wrong in building the ProteoWizard libraries.

One way to circumvent these errors could be to add the following line at the end of CommonCMake.txt to force a non position independent executable (PIE):

set(CMAKE_EXE_LINKER_FLAGS "-no-pie")
kesinger commented 2 years ago

I was running quickbuild.sh.

Adding the cmake flag fixed the PIE problems, but now I'm getting undefined references: ../maracluster/libmaraclusterlibrary.a(MSFileMerger.cpp.o): In function maracluster::MSFileMerger::mergeSpectraSmall()': MSFileMerger.cpp:(.text+0x6fb0): undefined reference topwiz::msdata::DataProcessing::DataProcessing(std::cxx11::basic_string<char, std::char_traits, std::allocator > const&)' MSFileMerger.cpp:(.text+0x74fa): undefined reference to `pwiz::msdata::MSDataFile::MSDataFile(std::cxx11::basic_string<char, std::char_traits, std::allocator > const&, pwiz::msdata::Reader const*, bool)' MSFileMerger.cpp:(.text+0x7c6f): undefined reference to `pwiz::msdata::DataProcessing::DataProcessing(std::__cxx11::basic_string<char, std::char_traits, std::allocator > const&)'

Thanks for your help!

kesinger commented 2 years ago

Playing around with this a bit more, the maracluster .a files have defined symbols ('T" in the output of nm) for pwiz:msdata:DataProcessing::DataProcessing(std::string const&), but what's being asked for is pwiz::msdata::DataProcessing::DataProcessing(std::__cxx11::basic_string<char, std::char_traits, std::allocator > const&)

Stackoverflow suggests this is due to _GLIBCXX_USE_CXX11_ABI being set somewhere, I'll try digging around for that.

kesinger commented 2 years ago

UPDATE: Adding -D _GLIBCXX_USE_CXX11_ABI=0 to CXX_FLAGS fixes it.

Thanks!