gpt4 book ai didi

C++ 可执行文件分配策略

转载 作者:太空狗 更新时间:2023-10-29 21:09:06 29 4
gpt4 key购买 nike

最近我问了一个关于我应该用什么来create self-contained executables that would be deployed under a number of Linux distribution的问题.一开始我很害怕,但在阅读了一些 C++ 知识后,我设法让我的可执行文件的第一个版本运行起来。

满心欢喜的一天,刚好又一次进退两难,又碰壁了。生成的可执行文件必须安装在许多 Linux 发行版(Slackware、Arch、Ubuntu、Debian、CentOS 等)中,而我完全不知道如何实现它。我所知道的 CentOS 和基于 Debian 的操作系统都有包管理器,例如 apt 或 yum,但我不确定这些是否适用于我的情况。

我编写的代码依赖于几个库(更具体地说是 RudeSocketyaml-cpp 。有人告诉我我可以编译可执行文件并动态链接它,所以我只需要分发可执行文件.

碰巧我找不到 yaml-cpp 库的 .a 文件(仅用于 RudeSocket)。到目前为止,这是我的问题:

起初,我使用动态链接,但是(很明显)当我将可执行文件复制到另一个盒子时:

$ ./main
./main: error while loading shared libraries: libyaml-cpp.so.0.2: cannot open shared object file: No such file or directory

当尝试静态编译它时,我也遇到错误(因为我没有我提到的 yaml-cpp .a 文件):

$ g++ main.cpp parse.cpp parse.h rudesocket-1.3.0/.libs/librudesocket.a -o main -static -L/usr/local/librudesocket-1.3.0/.libs/librudesocket.a(socket_connect_normal.o): In function `rude::sckt::Socket_Connect_Normal::simpleConnect(int&, char const*, int)':
/root/webbyget/sockets/rudesocket-1.3.0/src/socket_connect_normal.cpp:250: warning: Using 'gethostbyname' in statically linked applications requires at runtime the shared libraries from the glibc version used for linking
/tmp/cc3cEVK1.o: In function `operator>>(YAML::Node const&, Job&)':
parse.cpp:(.text+0x1a83): undefined reference to `YAML::Node::size() const'
/tmp/cc3cEVK1.o: In function `handle_job(rude::Socket, char const*)':
parse.cpp:(.text+0x1b79): undefined reference to `YAML::Parser::Parser(std::basic_istream<char, std::char_traits<char> >&)'
parse.cpp:(.text+0x1bfd): undefined reference to `YAML::Node::Node()'
parse.cpp:(.text+0x1c10): undefined reference to `YAML::Parser::GetNextDocument(YAML::Node&)'
parse.cpp:(.text+0x1dc6): undefined reference to `YAML::Node::size() const'
parse.cpp:(.text+0x1dee): undefined reference to `YAML::Node::~Node()'
parse.cpp:(.text+0x1e18): undefined reference to `YAML::Node::~Node()'
parse.cpp:(.text+0x1e37): undefined reference to `YAML::Parser::~Parser()'
parse.cpp:(.text+0x1e61): undefined reference to `YAML::Parser::~Parser()'
(...)

对我来说很明显,g++ 不能在不告诉它在哪里找到 yaml-cpp 类的情况下静态编译它。

非常重要的是,安装应该在没有人工交互的情况下以自动化方式进行。

所以我的问题实际上是双重的:

  • 我怎样才能以最不复杂的方式针对所有这些分发分发此编译程序?

  • 这类问题有没有事实上的标准解决方案?

提前谢谢你,

费利佩。

最佳答案

你可能会给出 this technique一试。

关于C++ 可执行文件分配策略,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1418965/

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