gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-12-04 16:12:50 25 4
gpt4 key购买 nike

假设我正在创建一个包含一些脚本的应用程序包,可能是一个守护进程,甚至是一个辅助二进制文件......当编译这样一个二进制文件时.. ./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目录结构,在一个 PATH 内,我可以保证一些表面上的可预测性......但我不认为它只是像那样“工作”......而且我不确定是否只是“静态链接”或其他方式?真正创建能够移动到另一个系统的二进制文件(尽管对于这种情况,移动到在相同位置具有相同支持库的系统,以免混淆问题)是否可能以这种方式进行交叉编译?您可以在同一个构建周期中构建多个架构吗? (例如 i386 AND x86_64 同时)

也许我可以使用一个好的 GNU/GCC 入门(CC、CFLAGS、LDFLAGS、-l、、-I 和 CPP 101 等)的推荐,但这不是为(和由)数学老师编写的 - 在70年代?

最佳答案

总的来说,不,那是行不通的。例如,/etc 中的某些内容预计会被整个系统共享,如果您尝试为一个应用程序保留私有(private)副本,这些内容将无法正常工作。

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

关于gcc - 使用相对路径名进行交叉编译 - 用于二进制可移植性/可嵌入性? (海合会),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6947467/

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