gpt4 book ai didi

c++ - 如何转换普通 Makefile 以创建可在另一台计算机上使用的静态可执行文件

转载 作者:行者123 更新时间:2023-11-28 05:01:04 25 4
gpt4 key购买 nike

我从 mosquitto C++ 中获得了 temp_conversion 示例程序,来自 here .我看过this thread但我不太明白,我对 makefile 的经验很少。我不确定静态库是否以这种方式工作,但我有 2 个问题:

  1. 是否可以将可执行文件移动到另一台电脑并让它继续运行? (不在那里安装 mosquitto 库,可能会用它复制由 makefile 创建的静态库)

  2. 如何转换此 makefile 以生成静态“可移动”可执行文件?

生成文件:

CFLAGS=-Wall -ggdb -I../../lib -I../../lib/cpp
LDFLAGS=-L../../lib ../../lib/cpp/libmosquittopp.so.1 ../../lib/libmosquitto.so.1

.PHONY: all clean

all : mqtt_temperature_conversion

mqtt_temperature_conversion : main.o temperature_conversion.o
${CXX} $^ -o $@ ${LDFLAGS}

main.o : main.cpp
${CXX} -c $^ -o $@ ${CFLAGS}

temperature_conversion.o : temperature_conversion.cpp
${CXX} -c $^ -o $@ ${CFLAGS}

clean :
-rm -f *.o mqtt_temperature_conversion

最佳答案

1) 是的,您可以在一台计算机上编译并在另一台运行相同操作系统版本的计算机上运行它。如果您没有在另一台计算机上安装第 3 方库,则需要编译该程序的静态版本。

2) 要编译程序的静态版本,您必须将 -static 选项添加到最终构建命令。这指示链接器使用库的静态版本(如果存在),包括标准 C++ 库。

这不适用于您当前拥有的内容,因为它要求您使用 -l 选项添加库。 -l 选项告诉链接器在库搜索路径中查找库(由 -L 指定)。您的 Makefile 正在按文件名添加库,因此无论您指定的任何其他选项如何,它都会始终使用该特定版本。

所以要修复你想要这样的东西

LDFLAGS=-L../../lib -L../../lib/cpp -lmosquittopp -lmosquitto

...将库所在的两个目录添加到搜索路径,然后说要与两个库链接。然后,如果您有这些库的静态版本,它会在您添加 -static 标志时使用它们。

关于c++ - 如何转换普通 Makefile 以创建可在另一台计算机上使用的静态可执行文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45960020/

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