2015-02-10 2 views
1

Я установил BOOST 1.57, чтобы позволить мне использовать некоторые новые функции, поэтому я просто создал каталог в /usr/local/boost, который содержит корневые папки BOOST.Включая общие библиотеки памяти BOOST в Qt

мне удалось создать пример кода, показанного here и скомпилировать его с помощью:

g++ example.cpp -o example -lrt 

Вот мой файл .pro:

QT  += core gui 

greaterThan(QT_MAJOR_VERSION, 4): QT += widgets 

TARGET = Ph2_ACF 
TEMPLATE = app 

CONFIG += c++11 debug 

QMAKE_CXXFLAGS += -g -O1 -w -pedantic -fPIC -std=c++11 -lrt `root-config --cflags --evelibs` -Wcpp 

LIBS += -L../lib -lPh2_Interface -lPh2_Description -lPh2_System -lPh2_Tools -lPh2_Utils 
LIBS += $(LibraryPaths:%=-L%) -uhal `root-config --glibs` 

LIBS += -L/usr/lib/ -lqjson 
INCLUDEPATH += /usr/include/qjson/ 
INCLUDEPATH += $(ROOTSYS)/include 

INCLUDEPATH += /../../Ph2DAQ_dev/ 
INCLUDEPATH += /usr/local/boost 
LIBS += -L/usr/local/boost/libs 

И вот моя ошибка:

g++ -Wl,-rpath,/usr/local/Trolltech/Qt-4.8.5/lib -o Ph2_ACF main.o mainview.o startup.o setuptab.o setuptabviewmanager.o settings.o systemcontroller.o cbcregisterstab.o cbcregviewmanager.o provider.o aboutbox.o systemcontrollerworker.o cbcregisters.o mainviewmanager.o cbcregisterworker.o tbrowsertab.o calibrate.o hybridtest.o hybridtestworker.o hybridtestviewmanager.o hybridtesttab.o moc_mainview.o moc_startup.o moc_setuptab.o moc_setuptabviewmanager.o moc_settings.o moc_systemcontroller.o moc_cbcregisterstab.o moc_cbcregviewmanager.o moc_aboutbox.o moc_systemcontrollerworker.o moc_cbcregisters.o moc_mainviewmanager.o moc_cbcregisterworker.o moc_tbrowsertab.o moc_calibrate.o moc_hybridtest.o moc_hybridtestworker.o moc_hybridtestviewmanager.o moc_hybridtesttab.o qrc_Resources.o -L/usr/local/Trolltech/Qt-4.8.5/lib -L/usr/include/boost -lboost_system -lboost_thread -lboost_regex -L../lib -lPh2_Interface -lPh2_Description -lPh2_System -lPh2_Tools -lPh2_Utils -L/opt/cactus/lib -lcactus_extern_pugixml -lcactus_uhal_log -lcactus_uhal_grammars -lcactus_uhal_uhal -uhal `root-config --glibs` -L/usr/lib/ -lqjson -L/usr/local/boost/libs -lQtGui -L/usr/local/Trolltech/Qt-4.8.5/lib -L/usr/X11R6/lib -lQtCore -lpthread 
/opt/rh/devtoolset-2/root/usr/libexec/gcc/x86_64-redhat-linux/4.8.2/ld: skipping incompatible /usr/lib//libdl.so when searching for -ldl 
/opt/rh/devtoolset-2/root/usr/libexec/gcc/x86_64-redhat-linux/4.8.2/ld: skipping incompatible /usr/lib//libdl.a when searching for -ldl 
/opt/rh/devtoolset-2/root/usr/libexec/gcc/x86_64-redhat-linux/4.8.2/ld: skipping incompatible /usr/lib//libpthread.so when searching for -lpthread 
/opt/rh/devtoolset-2/root/usr/libexec/gcc/x86_64-redhat-linux/4.8.2/ld: skipping incompatible /usr/lib//libpthread.a when searching for -lpthread 
/opt/rh/devtoolset-2/root/usr/libexec/gcc/x86_64-redhat-linux/4.8.2/ld: skipping incompatible /usr/lib//libm.so when searching for -lm 
/opt/rh/devtoolset-2/root/usr/libexec/gcc/x86_64-redhat-linux/4.8.2/ld: skipping incompatible /usr/lib//libm.a when searching for -lm 
/opt/rh/devtoolset-2/root/usr/libexec/gcc/x86_64-redhat-linux/4.8.2/ld: skipping incompatible /usr/lib//libpthread.so when searching for -lpthread 
/opt/rh/devtoolset-2/root/usr/libexec/gcc/x86_64-redhat-linux/4.8.2/ld: skipping incompatible /usr/lib//libpthread.a when searching for -lpthread 
/opt/rh/devtoolset-2/root/usr/libexec/gcc/x86_64-redhat-linux/4.8.2/ld: skipping incompatible /usr/lib//libc.so when searching for -lc 
/opt/rh/devtoolset-2/root/usr/libexec/gcc/x86_64-redhat-linux/4.8.2/ld: skipping incompatible /usr/lib//libc.a when searching for -lc 
/opt/rh/devtoolset-2/root/usr/libexec/gcc/x86_64-redhat-linux/4.8.2/ld: hybridtestworker.o: undefined reference to symbol '[email protected]@GLIBC_2.2.5' 
/opt/rh/devtoolset-2/root/usr/libexec/gcc/x86_64-redhat-linux/4.8.2/ld: note: '[email protected]@GLIBC_2.2.5' is defined in DSO /lib64/librt.so.1 so try adding it to the linker command line 
/lib64/librt.so.1: could not read symbols: Invalid operation 
collect2: error: ld returned 1 exit status 
make: *** [Ph2_ACF] Error 1 

Как раз отметить все предыдущие предупреждения skipping были штрафа перед, оно это только финальный '[email protected]@GLIBC_2.2.5', который, кажется, сломал его.

Все, что я добавил это:

#include <boost/interprocess/shared_memory_object.hpp> 

// SNIP ! 

using namespace boost::interprocess; 

// SNIP ! 

shared_memory_object shm_obj 
     (
      create_only     //only create 
      ,"shared_memory"    //name 
      ,read_write     //read-write mode 
      ); 

В один из моих файлов.

Любая идея, что происходит?

EDIT:

Добавление:

LIBS += -L/usr/local/boost/libs -lrt 

дает мне новую ошибку:

/opt/rh/devtoolset-2/root/usr/libexec/gcc/x86_64-redhat-linux/4.8.2/ld: mainview.o: undefined reference to symbol '_ZN5boost6system15system_categoryEv' 
/opt/rh/devtoolset-2/root/usr/libexec/gcc/x86_64-redhat-linux/4.8.2/ld: note: '_ZN5boost6system15system_categoryEv' is defined in DSO /opt/cactus/lib/libboost_system.so.1.48.0 so try adding it to the linker command line 
/opt/cactus/lib/libboost_system.so.1.48.0: could not read symbols: Invalid operation 
collect2: error: ld returned 1 exit status 
make: *** [Ph2_ACF] Error 1 

ответ

1

Похоже, вы добавили -lrt к флагам компиляции, и они не включены на этапе связи.

Попробуйте добавить -lrt -lboost_system к переменной LIBS (как -lPh2_Description и остальные)

+0

Done, он бросил новую ошибку – fiz

+1

Вы также нуждаетесь '-lboost_system' таким же образом (возможно, больше) (смешно, я не 't вспоминать когда-либо, что нужно для _just_ с использованием 'shared_memory_object') – sehe

+0

это сработало, спасибо. Не стесняйтесь, если форматирование вопроса было хорошим – fiz

Смежные вопросы