使用相对路径名进行交叉编译 - 用于二进制可移植性/可嵌入性? (海湾合作委员会)

问题描述 投票:0回答:1

假设我正在创建一个包含一些脚本的应用程序包,可能是一个守护进程,甚至是一个辅助二进制文件...当编译这样的二进制文件时..仅使用relative路径进行./configure/make是否可行? 例如,一个更认真的 Makefile 将包含诸如...之类的条款。

--bindir=DIR user executables [EPREFIX/bin] --sbindir=DIR system admin executables [EPREFIX/sbin] --libexecdir=DIR program executables [EPREFIX/libexec] --sysconfdir=DIR read-only single-machine data [PREFIX/etc] --sharedstatedir=DIR modifiable architecture-independent data [PREFIX/com] --localstatedir=DIR modifiable single-machine data [PREFIX/var] --libdir=DIR object code libraries [EPREFIX/lib] --includedir=DIR C header files [PREFIX/include] --oldincludedir=DIR C header files for non-gcc [/usr/include] --datarootdir=DIR read-only arch.-independent data root [PREFIX/share] --datadir=DIR read-only architecture-independent data [DATAROOTDIR] --infodir=DIR info documentation [DATAROOTDIR/info] --localedir=DIR locale-dependent data [DATAROOTDIR/locale] --mandir=DIR man documentation [DATAROOTDIR/man] --docdir=DIR documentation root [DATAROOTDIR/doc/hiawatha] --htmldir=DIR html documentation [DOCDIR] --dvidir=DIR dvi documentation [DOCDIR] --pdfdir=DIR pdf documentation [DOCDIR] --psdir=DIR ps documentation [DOCDIR]

这太棒了,您可以将所有内容安装到

/opt/local

而不是
/usr/local
。  也许甚至会发疯,并通过 
sed
 重命名二进制文件..我明白了..

但是在我的小大脑中仍然不清楚的是,

以这种方式任意设置路径的能力是否扩展到能够以类似于......的方式映射相对于可执行文件的目录的能力 --prefix=PREFIX install architecture-independent files in PREFIX [/usr/local] --prefix=./ aka [../relative/to/binary]

因此,例如,无论您从何处启动 
bin

,它总是知道它的

.conf
文件将位于一个文件夹中,在该相对
../etc
文件夹中,甚至可能就在旁边它,在同一目录中,
./
。 同样,您可以保证对日志和 pid 文件等的写入访问权限,而无需考虑目标的权限/目录结构...

这将实现一个完全可移植的

/bin /etc /lib /var

目录结构,在一个路径中我可以保证某种程度的可预测性......但我不认为它只是像那样“工作”......而且我不确定是否只是“静态链接”还是其他方式?真正创建能够移动到另一个系统的二进制文件(

,对于这种情况,移动到在相同位置具有相同支持库的系统,以免混淆问题
)是否可以在此进行交叉编译方式? 您可以在同一个构建周期中构建多个架构吗? (例如同时使用 i386 和 x86_64) 也许我可以使用推荐的优秀 GNU/GCC 入门书(CC、CFLAGS、LDFLAGS、-l、-I 和 CPP 101 等),但这不是为数学老师(也不是由数学老师写的)- 70年代?

gcc embedded cross-platform portability
1个回答
0
投票

话虽如此,您的应用程序可能并未使用系统上的所有共享资源。 使用本地 /bin 和 /sbin,或者从应用程序目录中的相对路径符号链接到真实的 /bin 和 /sbin 应该没问题。 /var 似乎不太可能是您的应用程序需要直接了解的东西 - 任何阻止您以自己的方式存储日志或使用 syslogd 的东西?

© www.soinside.com 2019 - 2024. All rights reserved.