2016-06-29 7 views
0

Ich versuche RabbitMQ + C++. Arbeiten unter Linux Ubuntu 16.04. Habe funktionierenden Code und wenn ich kompiliere mit CLion alles funktioniert gut. Ich habe Frieden des Codes, was ich mit root ausführen muss, also möchte ich es mit g++ ausführen.Fehler beim Ausführen von .cpp-Datei im Terminal mit g ++

FEHLER VON TERMINAL

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' 

Ich schreibe:

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

Wie kann ich sehen, wenn ich g++ verwenden, kann es keinen Bezug zu SimplePocoHandler finden. In CmakeList.txt habe ich

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

so, wenn ich in CLION kompilieren alles funktioniert gut. So scheint es, dass ich dasselbe tun muss, wenn ich g++ benutze. Aber ich weiß nicht, wie es geht, irgendwelche Vorschläge oder Erklärungen wären großartig.

Ich weiß nicht receiveUNPW.cpp Code teilen, aber es ist fast ähnlich dem receiver.cpp, was Sie there sehen und auch habe ich keinen Fehler gibt, in CLion alles funktioniert gut, ich brauche nur mein Programm laufen mit Terminal mit Root-Berechtigungen.

+0

„Ich habe Frieden von Code, was ich mit root ausführen müssen, so muss ich es laufen g ++ verwenden“ - Warum würden Sie den Code als Root, um kompilieren ausführen müssen es als root? –

+0

@JesperJuhl Wie meinst du laufen als root? Ich möchte nicht Berechtigungen für Projektordner und etc .. Ich möchte nur Code mit g ++ ausführen, testen Sie es und dann vielleicht Skript oder etwas, um es automatisch auszuführen. – Trimidas

+0

Man kann Code mit g ++ nicht "ausführen". g ++ ist ein Compiler (wahrscheinlich derselbe Compiler, der von CLion verwendet wird).Compiler kompilieren Code und erzeugen ausführbare Dateien (Programme), die Sie dann ausführen (ausführen). Der Compiler führt das Programm nicht aus. –

Antwort

1

Um Ihren Code als root auszuführen, wechseln Sie mit su - in eine Root-Shell und führen dann die von CLion generierte Binärdatei aus. Oder führen Sie es mit sudo. Sie können auch das suid-Bit auf der ausführbaren Datei setzen und es zu root machen, dann wird es immer als root laufen, aber das wird nicht empfohlen - zu viele Sicherheitsprobleme sind möglich.

Sie müssen eine Anwendung nicht als Root neu kompilieren, um sie als Root auszuführen.

Bearbeiten mit Beispiel wie gewünscht:

Ein einfaches Programm:

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

es Kompilieren:

$ g++ hello.cc

es Laufen:

$ ./a.out 
Hello world 
$ 

Laufen als root:

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

Können Sie eine Beispielzeile schreiben? Ich verstehe wirklich nicht, wie du das meinst ... – Trimidas

Verwandte Themen