如何转换一个普通的Makefile来创建一个可以在另一台计算机上使用的静态可执行文件 我从McC++到C++获得了 Twitter转换< /COD>示例程序。我看过,但我不太明白,我对makefile的经验很少。我不确定静态库是否可以这样工作,但我有两个问题:

如何转换一个普通的Makefile来创建一个可以在另一台计算机上使用的静态可执行文件 我从McC++到C++获得了 Twitter转换< /COD>示例程序。我看过,但我不太明白,我对makefile的经验很少。我不确定静态库是否可以这样工作,但我有两个问题:,c++,makefile,g++,mosquitto,C++,Makefile,G++,Mosquitto,是否可以将可执行文件移动到另一台pc上,并使其仍在运行?(不在那里安装MOSQUITO库,可能会复制由makefile创建的静态库) 如何将此makefile转换为静态“可移动”可执行文件 生成文件: CFLAGS=-Wall -ggdb -I../../lib -I../../lib/cpp LDFLAGS=-L../../lib ../../lib/cpp/libmosquittopp.so.1 ../../lib/libmosquitto.so.1 .PHONY: all clean

是否可以将可执行文件移动到另一台pc上,并使其仍在运行?(不在那里安装MOSQUITO库,可能会复制由makefile创建的静态库)

  • 如何将此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
    

    您必须获得依赖项的静态版本,这里是libmosquittopp。查找或安装静态库,例如“libmosquittopp.a”(.a平均静态库)。 然后,通过将libmosquittop.so.1和libmosquitto.so.1替换为静态版本来链接可执行文件。

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

    2) 要编译程序的静态版本,必须在最终生成命令中添加
    -static
    选项。这指示链接器如果存在,则使用静态版本的库,包括标准C++库。 这不适用于您当前拥有的库,因为它要求您使用
    -l
    选项添加库。
    -l
    选项告诉链接器在库搜索路径中查找库(由
    -l
    指定)。您的Makefile正在按文件名添加库,因此它将始终使用该特定版本,而不考虑您指定的任何其他选项

    所以为了解决这个问题,你想要这样的东西

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

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

    您在哪个系统上?Windows或Linux?Linux -LuBuntu1404,你需要将Myjuto及其所有依赖项构建到静态库(它可能或可能不支持这个,也可能违反或不违反该库和/或它的依赖项的许可条件)并链接它,可能与链接静态C++标准库有关。此外,生成的可执行文件无论如何也只能在某种程度上进行移植。C!=C++。只使用一个标记,除非两个都使用。为什么这样链接库而不使用
    -l
    选项链接它们?ie
    -lmosquitcho
    使用静态libmosquitcho构建可能会减少在另一台机器上安装mosquitcho的需要,但这对应用程序可能具有的其他依赖项没有帮助。如果您在所有机器上运行相同的Linux发行版和版本,您可能会侥幸逃脱。然而,Linux用户通常比大多数其他流行平台的用户更容易安装依赖项。如果用户必须执行“apt-get-install-mosquito”或其他操作,那么这对应用程序的成功可能不是致命的。