2016-06-29 16 views
0

I try RabbitMQ + C++ linuxのubuntuで作業16.04。作業コードを持っていて、私がCLionを使ってコンパイルするとうまくいきます。 私はrootで実行する必要があるコードの平和を持っているので、g++を使用して実行したい。 TERMINAL私が書くg ++を使用して端末で.cppファイルを実行するとエラーが発生する

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' 

FROM

ERROR:

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) 

MY IDEA

g++を使用したときにわかるように、SimplePocoHandlerへの参照が見つかりません。 CmakeList.txtで私はCLionでコンパイルするときので、すべてが正常に動作します

add_library(poco_simple_handler SimplePocoHandler.cpp SimplePocoHandler.h) 
target_link_libraries(poco_simple_handler PocoNet PocoFoundation crypt) 

を持っています。だから私はg++を使って同じことをする必要があるようです。しかし、私はそれを行う方法を知らない、任意の提案や説明は素晴らしいだろう。

私は自分のreceiveUNPW.cppコードを共有していないが、それはあなたがthereを見ることができますし、また、私はそこに任意のエラーを持っていない、CLionですべてが正常に動作するものというreceiver.cppとほぼ同様ですが、私はちょうど使用して私のプログラムを実行する必要がありますroot権限を持つ端末。

+0

「私は私がルートで実行する必要がどのようなコードの平和を持っているので、私はグラムを使用して、それを実行する必要があり++」 - なぜ、あなたは実行するためにrootとしてコードをコンパイルする必要がありますそれは根としてですか? –

+0

@JesperJuhlどうやってルートとして実行するのですか?私はプロジェクトフォルダなどの権限を設定したくないです。私はg ++を使ってコードを実行し、それをテストしてからスクリプトや何かを自動的に実行するようにしたいと思います。 – Trimidas

+0

g ++でコードを "実行"しません。 g ++はコンパイラです(おそらくCLionで使用されるコンパイラと同じです)。コンパイラは、コードをコンパイルし、実行(実行)する実行可能ファイル(プログラム)を生成します。コンパイラはプログラムを実行しません。 –

答えて

1

コードをルートとして実行するには、su -を使用してルートシェルに変更してから、CLionが生成したバイナリを実行します。またはsudoを使用して実行します。また、実行可能ファイルにsuidビットを設定し、それをrootが所有するようにすることもできますが、常にrootとして実行されますが、これはお勧めできません。

rootとして実行するには、アプリケーションを再コンパイルする必要はありません。要求どおりの例と

編集:

簡単なプログラム:

#include <iostream> 
int main() { 
    std::cout << "Hello world\n"; 
} 

がそれをコンパイル:

$ g++ hello.cc

がそれを実行:

$ ./a.out 
Hello world 
$ 

ルートとして、それを実行する:

$ su - 
# /path/to/program/a.out 
Hello world 
# 
+0

サンプル行を書くことができますか?私は真剣にあなたがその意味を理解していない... – Trimidas

関連する問題