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

时间:2017-08-30 12:07:19

标签: c++ makefile g++ mosquitto

我从here获得了来自mosquitto C ++的def API_roles_month(request, storeCode): salesRolesByDay=pd.read_pickle(storeCode+'.pickle') data2=salesRolessByDay.resample('M').sum().stack([1,3]).reorder_levels([2,0,1]).sum(axis=1).sort_index() data2.name='Sales' data3=data2.reset_index() data4=data3.to_json(orient='records') return JsonResponse(data4, safe=False) 示例程序。我看过this thread但我不太明白,我对makefile的经验很少。我不确定静态库是否以这种方式工作,但我有两个问题:

  1. 是否可以将可执行文件移动到另一台PC并使其仍然运行? (没有在那里安装mosquitto库,可能会复制makefile创建的静态库)

  2. 如何将此makefile转换为静态"可移动"可执行

  3. makefile:

    temp_conversion

2 个答案:

答案 0 :(得分:1)

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

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

由于您需要使用-l选项添加库,因此无法使用您目前所拥有的内容。 -l选项告诉链接器在库搜索路径中找到一个库(由-L指定)。您的Makefile是按文件名添加库,因此无论您指定的其他任何选项如何,它都会始终使用该特定版本。

所以要修复你想要的东西

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

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

答案 1 :(得分:0)

您必须获取依赖项的静态版本,此处为libmosquittopp。查找或安装静态库,例如" libmosquittopp.a" (.a表示静态库)。 之后,通过将libmosquitto.so.1const itemCurrent = document.createElement('div'); const itemNext = document.createElement('div'); 替换为静态版本来链接您的可执行文件。