shared-libraries相关内容

如何设置DT_RPATH或DT_RUNPATH?

在Linux上,ld.so(8)手册页讨论了动态库的搜索顺序。它说DT_RPATH已弃用,还提到了DT_RUNPATH。未提及-rpath链接器选项。 ld(1)手册页提到-rpath和-rpath-link选项,但从未提及DT_RPATH或DT_RUNPATH,除非是在说明库搜索顺序中,这当然与ld.so(8)中提供的信息不匹配。 最后是一个LD_RUN_PATH环境变量。ld(1)表示 ..
发布时间:2022-08-23 10:20:17 服务器开发

图片与馅饼的区别

我正在寻找二进制加密代码生成的选项,发现有两个选项可用,即PIC和PIE。我试着找出两者的不同之处,但没有找到合适的文章。如果有人能用专业和核心来举例说明不同之处,或者提供好文章的链接,那就更值得学习了。 我的基本目的是保护编译后的代码,因为ELF/PE格式可以被病毒攻击,也可以被黑客攻击,或者在反向技术的帮助下可以重新生成代码。还请提供任何其他保护编译代码免受攻击和反编译的方法。 我 ..
发布时间:2022-08-04 13:44:45 C/C++开发

如何共享我的C/C++项目并隐藏一些源代码?

我想把我用C/C++(LINUX环境GCC/g++编译器)写的项目作为共享库/静态库分享,而不是真正分享源代码。这样其他用户就可以在不知道我的源代码的情况下使用我的项目。谁能告诉我如何以.so/.a格式共享它? 假设我的项目如下: main.cpp, Source1.cpp, Source2.cpp, Source3.cpp, head1.h, 生成文件 如何通过隐藏文件Sour ..
发布时间:2022-07-13 10:57:32 服务器开发

在Conda中使用共享系统库

我在一个共享计算集群上使用Conda,其中已经针对系统调优了数值和io库。 我如何才能告诉Conda使用这些,而只担心在上还没有的库和包? 例如: 安装了openmpi库,我要安装和管理的Conda包也作为依赖项。 我如何才能告诉Conda只需担心不在的内容? 推荐答案 一个技巧是使用外壳程序包-一个空程序包,其唯一目的是满足求解器的约束。这是Conda Forge使用mpic ..
发布时间:2022-07-03 20:11:26 其他开发

Dlopen是否会创建多个库实例?

在网上搜索后,似乎找不到答案。 当我第一次使用dlOpen时,它似乎比之后的任何时间都要长,包括如果我从一个程序的多个实例运行它。 dlopen是否将SO加载到内存中一次,并让操作系统保存它,以便任何后续调用(即使是来自程序的另一个实例)都指向内存中的同一位置? 那么基本上,运行库的程序的3个实例是否意味着相同.so的3个实例被加载到内存中,或者内存中只有一个实例? 谢谢 ..
发布时间:2022-06-28 16:09:34 C/C++开发

Libc如何共享库加载到内存中并在进程之间共享?

我想了解Libc如何共享库加载到内存中并在进程之间共享?是否有一个加载到内存中并在所有进程之间共享的libc实例,或者是每个进程的内存中的每个libc实例。我不清楚如何在进程之间共享libc。 谢谢 Aditya libc 推荐答案的一个实例在所有进程之间共享。参见"The Inside Story On Shared Libraries And Dynamic Loading" ..
发布时间:2022-04-15 17:22:52 其他开发

隐藏可传递的外部依赖项/将库与CMake相结合(&H)

这个问题可能部分重复,例如this question,但更多的是关于如果有更好的解决方案的话是什么。由于此问题结束时相当长,我用";+q+ 标记了特定问题。 我有这样的情况,我写了一个小库B,它依赖于其他一些大型项目A拆分成许多库A1, A2, ..., An,我的库有一些依赖于这些库,另一些不依赖于这些库。做正确的链接有点麻烦。这个库开始被其他人使用,我想避免每个人都经历这个糟糕的链 ..
发布时间:2022-04-08 20:16:32 C/C++开发

在Qt Creator Android项目中调试外部共享库

我有一个使用外部C++库的Qt Quick Android应用程序。 我使用CMake自己构建了这个库,CMAKE_BUILD_TYPE被设置为Debug。当我在Qt Creator调试模式下启动应用程序时,我可以在Qt代码中的断点处停止,但它不会跳到库调用中,我只看到汇编程序清单。 可以告诉调试器库源代码在哪里吗?是否可以这样在Android中进行调试? 推荐答案 好的,这绝 ..
发布时间:2022-04-05 15:47:36 其他开发

如何在64位/32位混合系统中使用共享库?

早上好, 在64位RedHat机器上,我们必须编译并运行32位应用程序。同时,我设法编译了所需的GCC版本(4.0.3)和所有所需的32位运行时库,并将LD_LIBRARY_PATH设置为指向32位版本,但是现在在剩余的构建过程中,需要执行一个小Java程序,该程序作为64位程序安装在/usr/bin中,它现在首先找到32位版本的libgccs.so。 通常,如果将LD_LIBRARY ..
发布时间:2022-03-01 16:35:52 服务器开发

如何使用AutoTools在64位平台上创建32位共享库

我正在使用Autotools构建我的系统,该系统主要由一个库组成。在64位Red Hat平台上,我需要能够生成一个能够在32位Red Hat平台上工作的库。 当我将-m32添加到编译行时,一切正常,可以生成静电(.a)库,但只要我尝试创建共享库,就会收到如下错误: /usr/bin/ld: warning: i386:x86-64 architecture of input file ..
发布时间:2022-03-01 16:33:19 其他开发

Google脚本您是否可以使用IDE调试器逐步调试一个名为Google Script Library的

我有一个Google doc脚本,它执行我创建的Google脚本库中的函数(call-call Lib1.lib1function())。我想知道我是否在Google doc脚本的IDE调试器中设置了断点,在那里我调用库脚本中的函数,并让调试器公开库函数的执行。也就是说。继续跟踪被调用库中的执行情况。还是我在脚本库中唯一的调试技术Logger.log()并将信息写入控制台? 我能想到的唯一其 ..
发布时间:2022-03-01 16:29:53 其他开发

编译函数和公共块具有相同名称的不同文件

我当前正在尝试在另一个第三方程序(程序B)中实现一些第三方代码(程序A)。不幸的是,似乎有一些COMMON块和子例程在两个代码之间共享名称。编译器没有检测到这一点(我怀疑这是因为编译过程涉及许多不同的文件并创建一个共享对象),但是当使用非常通用的名称(例如BASIS、JACOBIAN)访问某些公共块/子例程时,程序会崩溃,重命名它们可以缓解问题。但是,由于程序A的大小,重命名程序A中的所有公共块和 ..
发布时间:2022-03-01 16:24:58 其他开发

使用GCC启用共享库中的调试符号

我正在使用gcc创建共享库,并怀疑该共享库可能存在内存泄漏。若要调试,我需要在创建共享库时启用调试符号。 要构建,我使用gcc -g ...(-g用于启用调试信息) 但是-g和没有-g的库(*.so文件)大小不变。 此外,我没有从VALGRIND这样的工具获得任何有用的信息。 有人能给我指出错误吗? 推荐答案 您需要使用-g执行所有步骤(编译源文件和链接)。 ..
发布时间:2022-03-01 16:22:06 其他开发