2016-03-22 17 views
1

まず最初に私はLinuxで新しく、C++でこれほど経験はありません。これが私の助けが必要な理由です。poco cmakeファイルとローカルライブラリ

私はウェブサーバを実装し、C++ CANライブラリを統合する必要がある最新のRASPBIAN JESSIEイメージを持つラズベリーパイを基本的に持っています。

サーバーでは、私はPOCO C++ライブラリを使用することを決めました。私はサーバを設定することができましたが、CANライブラリとArduPiライブラリを組み込む必要があります(CANライブラリはいくつかのバグを修正し、サーバ実装に統合するために受け取ったものではありません)。サーバーをビルドしてコンパイルするには、CMakeListファイルをここに入れます:link

CMakeList.txtは、次のようになります。

#Ref http://stackoverflow.com/questions/30114662/clion-cmake-and-poco 
cmake_minimum_required(VERSION 3.3) 
project(PoCoWebSocketTest) 
# define the project 
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -std=c++11 -lrt -lpthread") 
set(SOURCE_FILES main.cpp) 
add_executable(PoCoWebSocketTest ${SOURCE_FILES}) 
# set the POCO paths and libs 
set(POCO_PREFIX "/usr/local") # the directory containing "include" and "lib" 
set(POCO_INCLUDE_DIR"${POCO_PREFIX}/include") 
set(POCO_LIB_DIR "${POCO_PREFIX}/lib") 
set(POCO_LIBS 
     "${POCO_LIB_DIR}/libPocoNet.so" 
     "${POCO_LIB_DIR}/libPocoUtil.so" 
     "${POCO_LIB_DIR}/libPocoFoundation.so") 
# set the include path for the app 
target_include_directories(PoCoWebSocketTest PRIVATE $(POCO_INCLUDE_DIR)) 
# link the app against POCO 
target_link_libraries(PoCoWebSocketTest "${POCO_LIBS}") 

そして、私はmakeコマンドを実行した後、出力:ザ・メインファイルの一部を含む

[email protected]:~/pocotests/build $ sudo make 
[ 50%] Building CXX object CMakeFiles/PoCoWebSocketTest.dir/main.cpp.o 
[100%] Linking CXX executable PoCoWebSocketTest 
CMakeFiles/PoCoWebSocketTest.dir/main.cpp.o: In function `__static_initialization_and_destruction_0(int, int)': 
main.cpp:(.text+0x154): undefined reference to `CAN::CAN()' 
collect2: error: ld returned 1 exit status 
CMakeFiles/PoCoWebSocketTest.dir/build.make:97: recipe for target 'PoCoWebSocketTest' failed 
make[2]: *** [PoCoWebSocketTest] Error 1 
CMakeFiles/Makefile2:67: recipe for target 'CMakeFiles/PoCoWebSocketTest.dir/all' failed 
make[1]: *** [CMakeFiles/PoCoWebSocketTest.dir/all] Error 2 
Makefile:83: recipe for target 'all' failed 
make: *** [all] Error 2 

は次のとおりです。

#include "Poco/Net/HTTPServer.h" 
#include "Poco/Net/HTTPRequestHandler.h" 
#include "Poco/Net/HTTPRequestHandlerFactory.h" 
#include "Poco/Net/HTTPServerParams.h" 
#include "Poco/Net/HTTPServerRequest.h" 
#include "Poco/Net/HTTPServerResponse.h" 
#include "Poco/Net/HTTPServerParams.h" 
#include "Poco/Net/ServerSocket.h" 
#include "Poco/Net/WebSocket.h" 
#include "Poco/Net/NetException.h" 
#include "Poco/Util/ServerApplication.h" 
#include "Poco/Util/Option.h" 
#include "Poco/Util/OptionSet.h" 
#include "Poco/Util/HelpFormatter.h" 
#include "Poco/Format.h" 
#include <iostream> 
#include "arduPi.h" 
#include "CAN.h" 

using Poco::Net::ServerSocket; 
using Poco::Net::WebSocket; 
using Poco::Net::WebSocketException; 
using Poco::Net::HTTPRequestHandler; 
using Poco::Net::HTTPRequestHandlerFactory; 
using Poco::Net::HTTPServer; 
using Poco::Net::HTTPServerRequest; 
using Poco::Net::HTTPResponse; 
using Poco::Net::HTTPServerResponse; 
using Poco::Net::HTTPServerParams; 
using Poco::Timestamp; 
using Poco::ThreadPool; 
using Poco::Util::ServerApplication; 
using Poco::Util::Application; 
using Poco::Util::Option; 
using Poco::Util::OptionSet; 
using Poco::Util::HelpFormatter; 

私が読んだところでは、リンクに何か問題がある可能性がありますが、私はshureではありません。 cmakefileにCANとArduPiライブラリを追加すべきですか?

コードについてさらに詳しい情報が必要な場合は、私に教えてください。

ベストregads、 マテイ

+0

'CAN'ライブラリはヘッダーのみではない場合、あなたは間違いなく' target_link_libraries() 'CMakeのコマンドを使用して、それにリンクする必要があります。 – Tsyvarev

+0

あなたの質問をありがとう、私はポーコといくつかの問題に直面していた、あなたは私の夜を救った! – Germain

答えて

1

問題解決、私はCANとarduPiライブラリを追加することによって、メイクファイルを変更し、メインファイルにリンクされてきました。

これは、ファイルのように見える方法です:

#Ref http://stackoverflow.com/questions/30114662/clion-cmake-and-poco 
cmake_minimum_required(VERSION 3.3) 
project(WebSocketServerCPP) 
# define the project 
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -std=c++11 -lrt -lpthread") 
set(SOURCE_FILES main.cpp) 
add_executable(WebSocketServerCPP ${SOURCE_FILES}) 
# set the POCO paths and libs 
set(POCO_PREFIX "/usr/local") # the directory containing "include" and "lib" 
set(POCO_INCLUDE_DIR"${POCO_PREFIX}/include") 
set(POCO_LIB_DIR "${POCO_PREFIX}/lib") 
set(POCO_LIBS 
     "${POCO_LIB_DIR}/libPocoNet.so" 
     "${POCO_LIB_DIR}/libPocoUtil.so" 
     "${POCO_LIB_DIR}/libPocoFoundation.so") 
add_library(libcan STATIC CAN.cpp) 
add_library(libardupi STATIC arduPi.cpp) 
# set the include path for the app 
target_include_directories(WebSocketServerCPP PRIVATE $(POCO_INCLUDE_DIR)) 
# link the app against POCO 
target_link_libraries(libcan libardupi) 
target_link_libraries(WebSocketServerCPP libcan) 
target_link_libraries(WebSocketServerCPP libardupi) 
target_link_libraries(WebSocketServerCPP "${POCO_LIBS}") 

はあなたにTsyvarevをありがとうございます。

敬具、 マテイ

関連する問題