- android - RelativeLayout 背景可绘制重叠内容
- android - 如何链接 cpufeatures lib 以获取 native android 库?
- java - OnItemClickListener 不起作用,但 OnLongItemClickListener 在自定义 ListView 中起作用
- java - Android 文件转字符串
我正在尝试编译项目。它编译成功。我的make
命令退出,状态代码为 0
并且没有显示错误。
但是,该项目无法运行,当我运行 ldd -d <file>
时它显示我有两个库未找到。
>ldd -d output_file.so
linux-gate.so.1 => (0xf77e0000)
libvstdlib_srv.so => not found
libtier0_srv.so => not found
libm.so.6 => /lib/libm.so.6 (0xf7760000)
libdl.so.2 => /lib/libdl.so.2 (0xf775b000)
libc.so.6 => /lib/libc.so.6 (0xf75a9000)
/lib/ld-linux.so.2 (0x46e4a000)
undefined symbol: pfVectorNormalize (output_file.so)
undefined symbol: _Z12VectorAnglesRK6VectorR6QAngle (output_file.so)
undefined symbol: pfSqrt (output_file.so)
undefined symbol: __cxa_guard_acquire (output_file.so)
undefined symbol: __cxa_guard_release (output_file.so)
undefined symbol: _Z6ConMsgPKcz (output_file.so)
undefined symbol: Warning (output_file.so)
undefined symbol: __dynamic_cast (output_file.so)
undefined symbol: _Z11ConColorMsgRK5ColorPKcz (output_file.so)
undefined symbol: Error (output_file.so)
undefined symbol: AssertValidStringPtr (output_file.so)
undefined symbol: _AssertValidWritePtr (output_file.so)
undefined symbol: _AssertValidReadPtr (output_file.so)
undefined symbol: _ZTVN10__cxxabiv121__vmi_class_type_infoE (output_file.so)
undefined symbol: _ZTVN10__cxxabiv120__si_class_type_infoE (output_file.so)
undefined symbol: _ZTVN10__cxxabiv117__class_type_infoE (output_file.so)
undefined symbol: __gxx_personality_v0 (output_file.so)
这两个库被设置为指向文件实际位置的符号链接(symbolic link):
...
lrwxrwxrwx 1 Andy Andy 62 May 2 12:30 libtier0_srv.so -> /home/dev/sdks/hl2sdk-ob-valve/lib/linux/libtier0_srv.so
lrwxrwxrwx 1 Andy Andy 64 May 2 12:30 libvstdlib_srv.so -> /home/dev/sdks/hl2sdk-ob-valve/lib/linux/libvstdlib_srv.so
-rw-r--r-- 1 Andy Andy 5444 May 2 11:53 Makefile
...
gcc
正在运行的命令是
gcc -I/home/dev/sdks/hl2sdk-ob-valve/public/game/server -I. -I.. -ICEntity -Isdk -I/home/dev/project1/hl2sdk-ob-valve/public -I/home/dev/sdks/hl2sdk-ob-valve/public/engine -I/home/dev/sdks/hl2sdk-ob-valve/public/tier0 -I/home/dev/sdks/hl2sdk-ob-valve/public/tier1 -I/home/dev/sdks/hl2sdk-ob-valve/public/mathlib -I/home/dev/project1/mmsource-central/core -I/home/dev/project1/mmsource-central/core/sourcehook -I/home/dev/project1/sourcemod-central/public -I/home/dev/project1/sourcemod-central/public/sourcepawn -I/home/dev/project1/sourcemod-central/core project1_output/sdk/smsdk_ext.o project1_output/extension.o project1_output/CTrackingProjectile.o project1_output/CSentryRocket.o project1_output/CProjectileRocket.o project1_output/CProjectileArrow.o project1_output/CProjectileFlare.o project1_output/CProjectilePipe.o project1_output/CProjectileSyringe.o project1_output/CEntity/CEntity.o project1_output/CEntity/CEntityManager.o project1_output/CEntity/CPlayer.o /home/dev/project1/hl2sdk-ob-valve/lib/linux/tier1_i486.a libvstdlib_srv.so libtier0_srv.so -m32 -lm -ldl -static-libgcc -shared -o project1_output/output_file.so
我的问题是:1.) 为什么这两个库没有找到,即使它们是符号链接(symbolic link)?2.) undefined symbol 是 mathlib
的一部分包,包含在 gcc
中命令。 -I/home/dev/sdks/hl2sdk-ob-valve/public/mathlib
尽管包含在内,为什么它们仍未定义?
c++
不是我选择的语言,我对 Makefiles 的了解足够危险,但并不能真正解决任何问题,所以如果这不是足够的信息,我深表歉意。我可以根据需要提供更多。
最佳答案
我只是偶然发现了这个,遇到了同样的问题,但解决方案不同。
实际上,使用 LD_LIBRARY_PATH 是可行的。如果它是为了在您的构建环境中进行自己的测试,那很好,但是除了这种情况之外,您应该尽量避免它。这是一篇比我更了解它的人的文章,为什么 LD_LIBRARY_PATH 不好:
http://xahlee.info/UnixResource_dir/_/ldpath.html
发生的事情是,从设置 LD_LIBRARY_PATH 起作用的事实也可以看出,在运行时,您的程序找不到共享库 libtier0_srv.so
。与其全局设置一个变量让所有程序首先查看 /home/dev/sdks/hl2sdk-ob-valve/lib/linux/
,不如将该目录添加到运行时库搜索路径中。你通过传递选项来做到这一点
-rpath/home/dev/sdks/hl2sdk-ob-valve/lib/linux/
到 ld
,链接器。您可以使用发布的 gcc
命令执行此操作,方法是添加选项
-Wl,-rpath,/home/dev/sdks/hl2sdk-ob-valve/lib/linux/
,
它告诉 gcc
将上面的选项传递给 ld
。
关于c++ - ldd 说编译成功完成后找不到库,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16345590/
例如,我有一个父类Author: class Author { String name static hasMany = [ fiction: Book,
代码如下: dojo.query(subNav.navClass).forEach(function(node, index, arr){ if(dojo.style(node, 'd
我有一个带有 Id 和姓名的学生表和一个带有 Id 和 friend Id 的 Friends 表。我想加入这两个表并找到学生的 friend 。 例如,Ashley 的 friend 是 Saman
我通过互联网浏览,但仍未找到问题的答案。应该很容易: class Parent { String name Child child } 当我有一个 child 对象时,如何获得它的 paren
我正在尝试创建一个以 Firebase 作为我的后端的社交应用。现在我正面临如何(在哪里?)找到 friend 功能的问题。 我有每个用户的邮件地址。 我可以访问用户的电话也预订。 在传统的后端中,我
我主要想澄清以下几点: 1。有人告诉我,在 iOS 5 及以下版本中,如果您使用 Game Center 设置多人游戏,则“查找 Facebook 好友”(如与好友争夺战)的功能不是内置的,因此您需要
关于redis docker镜像ENTRYPOINT脚本 docker-entrypoint.sh : #!/bin/sh set -e # first arg is `-f` or `--some-
我是一名优秀的程序员,十分优秀!