我試圖RabbitMQ
+ C++
。在Linux上工作Ubuntu的16.04。有工作代碼,當我編譯使用CLion
所有工作正常。 我有和平的代碼,我需要用root運行,所以我想用g++
來運行它。使用g ++在終端中運行.cpp文件時發生錯誤
ERROR從終端
In function `main':
receiveUNPW.cpp:(.text+0x8e8): undefined reference to `SimplePocoHandler::SimplePocoHandler(std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const&, unsigned short)'
receiveUNPW.cpp:(.text+0xc9c): undefined reference to `SimplePocoHandler::loop()'
receiveUNPW.cpp:(.text+0xcce): undefined reference to `SimplePocoHandler::~SimplePocoHandler()'
receiveUNPW.cpp:(.text+0xea7): undefined reference to `SimplePocoHandler::~SimplePocoHandler()'
/usr/lib/gcc/x86_64-linux-gnu/5/../../../../lib/libamqpcpp.so: undefined reference to `pthread_create'
我寫:
g++ -std=c++11 receiveUNPW.cpp -o receiveUNPW -lcrypt -lPocoNet -lPocoFoundation -lamqpcpp
CMakeList.txt
cmake_minimum_required(VERSION 3.5)
project(test)
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -std=c++11")
add_library(poco_simple_handler SimplePocoHandler.cpp SimplePocoHandler.h)
target_link_libraries(poco_simple_handler PocoNet PocoFoundation crypt)
set(PROGS
sendUNPW
receiveUNPW
)
foreach(item ${PROGS})
add_executable(${item} "${item}.cpp")
target_link_libraries(${item} amqpcpp poco_simple_handler PocoNet PocoFoundation crypt)
endforeach(item)
我的想法
如我在使用g++
時可以看到的,它無法找到對SimplePocoHandler
的引用。在CmakeList.txt
我有
add_library(poco_simple_handler SimplePocoHandler.cpp SimplePocoHandler.h)
target_link_libraries(poco_simple_handler PocoNet PocoFoundation crypt)
所以當我在CLION編譯一切正常。所以我似乎需要在使用g++
時也這樣做。但我不知道該怎麼做,任何建議或解釋都會很棒。
我不同意我的receiveUNPW.cpp
代碼,但它幾乎類似於receiver.cpp
你可以看到there,也是我沒有任何錯誤,在CLion
一切工作正常,我只需要使用運行我的程序具有root權限的終端。
「我的代碼和平什麼,我需要以root運行,所以我需要用克至運行它++」 - 爲什麼你需要編譯的代碼以root身份運行它作爲根? –
@JesperJuhl你是指以root身份運行?我不想設置權限項目文件夾等。我只是想運行代碼使用g ++,測試它,然後可能使腳本或東西自動運行它。 – Trimidas
一個不會用g ++「運行」代碼。 g ++是一個編譯器(可能與CLion使用的編譯器相同)。編譯器編譯代碼並生成可執行文件(程序),然後運行(執行)。編譯器不運行該程序。 –