我正在用C ++代码构建{% for key,value in d.items() %}
{% for k,v in sorted(value.iteritems(), key=lambda (k,v): (v,k)):
<table>
<tr>
<td>{{ key }}</td>
<td>{{ k[-1] }}</td>
<td>{{ v[-1] }}</td>
</tr>
</table>
。它仅取决于标准库(.a
/ libc++
)。从一般阅读来看,似乎二进制文件的可移植性取决于
libstdc++
,ABI链接到主要版本号。gcc
/ libc++
个版本(因为它们可以将libstdc++
传递给.a,其表示可能会发生变化)。 即。使用vector<T>
的人需要使用相同的(主要版本)编译器+相同的标准库。
据我所知,如果编译器和标准库匹配,.a
应该适用于多个发行版。这是正确的吗?或者是否存在与系统调用有关的gubbins,这意味着Ubuntu的.a
应该建立在Ubuntu上,.a
CentOS应该建立在CentOS上,依此类推?
编辑:请参阅If clang++ and g++ are ABI incompatible, what is used for shared libraries in binary?(虽然它不会回答这个问题。)
编辑2:我没有明确访问任何操作系统功能(例如通过.a
调用)。我与系统的唯一交互是打开文件并从中读取。
答案 0 :(得分:1)
它仅取决于标准库
它还可以隐式依赖其他东西(想想字体, 这些细节可能会使移植变得困难。例如,请查看nsswitch.conf(5)。 邪恶在于细节。 (换句话说,没有很多更多细节,你的问题没有多大意义) Linux被视为free software生态系统。移植东西的常用方法是重新编译它 - 或至少为目标Linux发行版重新编译。当您多次这样做时(对于不同的和许多 Linux发行版),您将了解详细信息在中的重要性您的特定软件(和发行版)。 大多数情况下,在不同的发行版上重新编译和移植库非常容易。有时,它可能很难。 对于共享库,请阅读Program Library HowTo,C++ dlopen miniHowTo,elf(5),ABI规范(有关某些不完整列表,请参阅here),Drepper&#39; s How To Write Shared Libraries可能很有用。 我的建议是为各种常见的Linux发行版准备二进制packages。例如,Debian&amp; amp; 当然,Debian的 还要查看autoconf(或cmake)等内容。您可能至少需要一些外部提供的 我与系统的唯一互动是打开文件 但即使这些从一个发行版到另一个发行版也有很大的不同。 您很可能无法为多个发行版提供单个 - 以及相同的一个 注意:您可能需要预算的工作量超出您的预期。 /etc/
下的配置文件,/usr/include/
下的头文件,/proc/
的可用性等资源) ,/sys/
,由system(3)或execvp(3)运行的外部程序,特定文件系统或设备,特定ioctl
- s,可用或必需的插件等...)< / p>
.deb
Ubuntu(一些特定的版本)。.deb
可能无法在Ubuntu上运行(有时会这样做)。#define
- d预处理器字符串(通常由-D
传递到gcc
或g++
),这些字符串会因分布不同而不同(例如,在某些发行版上,您按popen
- lp
打印,其他人打印popen
- lpr
,其他人通过与某些CUPS服务器等交互打印。 )。细节很重要。
lib*.a
。