- c - 在位数组中找到第一个零
- linux - Unix 显示有关匹配两种模式之一的文件的信息
- 正则表达式替换多个文件
- linux - 隐藏来自 xtrace 的命令
我正在一个非常普通的 Linux 主机上从源代码构建 tmux-2.0
。第一次尝试失败,因为安装的 libevent
版本比要求的要旧,所以我继续从源代码下载并构建 libevent-2.0.22
写作时间)第一。
libevent
的构建完美无瑕,我想我可以用以下代码重试构建 tmux
:
PKG_CONFIG_PATH=$PATH_TO_MY_BUILT_LIBEVENT/lib/pkgconfig ./configure ...
上述调用成功,随后的make
和make install
也成功。
运行我新构建的 tmux
,然而,由于缺少共享对象而中止,libevent-2.0.so.5
不足为奇:
tmux: error while loading shared libraries: libevent-2.0.so.5: cannot open shared object file: No such file or directory
我认为针对自定义库构建意味着它也将在运行时使用? ldd
在我的 tmux
上给我:
linux-vdso.so.1 => (0x00007fff8f5ff000)
libutil.so.1 => /lib64/libutil.so.1 (0x0000003cf8800000)
libncurses.so.5 => /lib64/libncurses.so.5 (0x0000003cf7e00000)
libevent-2.0.so.5 => not found
librt.so.1 => /lib64/librt.so.1 (0x0000003ce8600000)
libresolv.so.2 => /lib64/libresolv.so.2 (0x0000003cea200000)
libc.so.6 => /lib64/libc.so.6 (0x0000003ce7600000)
libtinfo.so.5 => /lib64/libtinfo.so.5 (0x0000003cf7200000)
libdl.so.2 => /lib64/libdl.so.2 (0x0000003ce7e00000)
libpthread.so.0 => /lib64/libpthread.so.0 (0x0000003ce8200000)
/lib64/ld-linux-x86-64.so.2 (0x0000003ce7200000)
因此,未找到 libevent-2.0.so.5
。
我是否需要求助于设置,我不知道,LIBS
、LDFLAGS
或一些其他变量或切换到 configure
脚本上面,所以,我不知道,我新建的 libevent
的路径嵌入到 tmux
二进制文件中,由 ld
提供?
我没有 root 权限 - 大学 Linux 工作站 - 坦率地说,我认为我不需要。我也不想乱搞 LD_LIBRARY_PATH
之类的东西。可以说,LD_LIBRARY_PATH=$PATH_TO_MY_LIBEVENT/lib tmux
工作正常。但我希望它“默认”工作,定位并使用我的 libevent
。
我想这个解决方案几乎适用于所有使用“GNU 构建系统”的软件。在这里做什么是正确的?
最佳答案
您针对库构建,但系统不知道库在哪里。由于您不想安装该库,而是将其留在构建它的地方,您可以使用链接器的 -rpath=
选项解决它 — it embeds a search path将库放入可执行文件中。
只需重建您的应用程序并将其添加到您的 LDFLAGS,例如 LDFLAGS="-rpath=/home/mypath/to/libevent"
(但请注意,它是一个链接器选项,并且有可能在 makefile 中作为链接器使用了 gcc 本身——gcc 不知道这个选项,那么你需要这样写 LDFLAGS="-Wl,-rpath=/home/mypath/to/libevent”
强制 gcc 将选项传递给实际的链接器)
顺便说一句,实际上您甚至可以更改rpath,甚至无需重新编译应用程序— there's a tool patchelf为了那份工作。
关于linux - 如何针对我也构建的自定义库构建 './configure && make && make install' 软件?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30959414/
我是 Maven 新手,正在尝试了解它是如何工作的。 我知道生命周期由多个阶段组成。阶段称为他们的魔力。如果调用一个阶段,则前面的所有阶段也会执行。例如,当我调用 mvn install 时就会发生这
我想安装Ros(机器人操作系统)的驱动程序,我有两个选项:二进制安装和从源代码编译安装。我想知道哪种安装更好,每种安装有哪些优点和缺点。 最佳答案 源:又称源代码,通常位于某种 tarball 或 z
以及更具体的问题。我的理解对吗: “nuget install”总是安装到您运行它的目录吗? “choco install”安装到特殊的 choco 目录,然后运行脚本在系统中传播它? “nuget
我创建了 Android 项目,但随后我立即得到出现错误的信息。 Warning:(22, 12) Dependency on a support library, but the SDK insta
我的安装程序有 32 位和 64 位版本,它们具有(几乎)完全相同的代码和自定义操作序列(只有与此问题无关的细微差别) 我希望我的安装程序能够检测它之前是否已安装,并在这种情况下运行我自己的代码,而不
我在TFS版本中使用npm install cmd。我总是得到以下警告: npm WARN optional dep failed, continuing fsevents@0.3.1 如何删除此警告
是否可以将install(TARGETS ...)与在add_subdirectory添加的目录中定义的目标一起使用? 我的用例是,我想为gtest构建一个rpm的e.gg。 gtest项目恰好有一个
我需要使用 MSI 创建安装程序,其目的是根据用户的区域(从环境变量读取)调用正确的安装程序。也就是说,这个安装程序应该有 3 个文件(它们本身就是安装程序),一个用于美国,一个用于欧洲,一个用于亚洲
我正在尝试通过 Android Studio 3.5 在我的小米 RedMi S2 上运行我的应用程序。在手机上安装应用程序时抛出错误: Installation did not succeed. T
使用govendor时,go install、govendor install +local和govendor install +vendor,^program有什么区别? govendor inst
我用谷歌搜索了很多,但找不到答案。因此,在 Windows Installer 属性值中可以存储多少个字符。如果你给出答案,你能提供答案的来源吗? 最佳答案 我问 Windows Installer
Cuda v9.0 有几个补丁 我应该安装最新补丁还是安装所有补丁? https://developer.nvidia.com/cuda-90-download-archive?target_os=W
我正在尝试通过它的文档安装 phalcon!在这一步我有一个错误: installation/FreeBSD Command: pkg_add -r phalcon 错误: 'pkg_add' is
我有一个安装,如果应用程序退出,它会升级该应用程序的先前版本。当安装处于升级模式时,我想跳过某些操作。如何确定安装是在升级模式还是首次安装模式下运行? 我正在使用 Wise Installer,但我认
MSI 数据库包含一个表 MsiFileHash 。根据文档MsiFileHash 表用于存储 Windows Installer 包提供的源文件的 128 位哈希。 有人知道使用/应该使用什么哈希算
我尝试在本地和全局运行 npm install browserify (-g) 但我总是遇到以下错误 npm ERR! peerinvalid The package bn.js does not s
我有一个用于我正在构建的 python 模块的 SConstruct 文件: import distutils.sysconfig env = Environment(CPPPATH=['includ
使用 Installshield 2010 和 Basic MSI 项目。 我有一个之前由我的安装程序安装的 exe。该 exe 需要在安装程序升级期间运行。有没有办法保证安装程序不会尝试关闭进程?基
我是围棋初学者。我试图编译一个 go 项目,但找不到任何解释“/...”的文档或文章。 cd ~/src/ephenation-server go install -v ./... 等待您的帮助。 最
我试过在选择和不选择‘安装Mongo指南针’选项的情况下运行安装程序,但我仍然无法安装它,也无法取消安装。然后,此设置对话冻结20-30分钟以上,没有任何进展。这实际上就是从他们的website(ht
我是一名优秀的程序员,十分优秀!