使用g ++在终端中运行.cpp文件时出错

时间:2016-06-29 13:49:07

标签: c++ linux c++11 g++

我在尝试RabbitMQ + C++。在linux上运行ubuntu 16.04。有工作代码,当我使用CLion编译时,一切正常。 我需要使用root运行我需要的代码,所以我想使用g++运行它。

来自终端的错误

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几乎相似therereference of numpy.random我也没有任何错误,CLion 1}}一切正常,我只需要使用具有root权限的终端运行我的程序。

1 个答案:

答案 0 :(得分:1)

要以root身份运行代码,请使用su -切换到root shell,然后执行CLion生成的二进制文件。或者使用sudo运行它。您还可以在可执行文件上设置suid位并使其归root所有,然后它将始终以root身份运行,但不建议这样做 - 可能存在太多安全问题。

您不需要以root身份重新编译应用程序,以root用户身份运行它。

按要求编辑示例:

一个简单的程序:

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

编译:

$ g++ hello.cc

运行它:

$ ./a.out
Hello world
$ 

以root身份运行:

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