gpt4 book ai didi

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

转载 作者:太空宇宙 更新时间:2023-11-04 10:34:51 24 4
gpt4 key购买 nike

我正在尝试 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 几乎相似there而且我在那里没有任何错误,在 CLion 中一切正常,我只需要使用具有根权限的终端运行我的程序。

最佳答案

要以 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
#

关于c++ - 使用 g++ 在终端中运行 .cpp 文件时出错,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38101593/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com