dynamic-linking相关内容

与 rpath 的动态链接在 Ubuntu 17.10 下不起作用

我构建了一个 R 包,它使用 Rcpp 并链接到第三方共享对象 (libbarraopt.so)(它还链接到其他共享对象,例如 liboptsrvr.so 在它自己的目录中).为了确保它能够找到它链接的那些共享对象,我将以下变量放在 ~/.Renviron 中: BARRA_OPS_HOME=${HOME}/bin/BarraOptimizer8.5 在包中,我创建了以下src/Makevar ..
发布时间:2022-01-23 20:28:46 其他开发

GDB“无法打开共享对象文件"问题

我已经阅读了 gdb 说“无法打开共享对象文件"; 和 gdb 无法打开共享对象文件 并跟随说明. 我有一个链接到共享库文件 (/zzz/yyy/xxx.so) 的二进制文件.在我将 LD_LIBRARY_PATH 设置为 /zzz/yyy/ 并在没有 GDB 的情况下运行二进制文件后,它执行得非常好. 但是,当我尝试使用 GDB 调试这个二进制文件时,GDB 说: 加载共享库时 ..
发布时间:2022-01-20 20:30:39 服务器开发

链接器如何解析动态可加载库中的重复符号?

我有两个可动态加载的库 lib_smtp.so 和 libpop.so 等.两者都有一个名为 protocol 的全局变量,分别初始化为“SMTP"和“POP".我有另一个静态库 libhttp.a,其中 protocol 被初始化为“HTTP". 现在由于某种原因,我需要静态编译所有动态可链接和可加载库并包含在可执行文件中.这样做我在链接静态库期间收到错误“multiple definit ..
发布时间:2022-01-11 15:41:36 服务器开发

g++:静态库和动态库应该以什么顺序链接?

假设我们有一个名为“my_app"的主可执行文件,它使用了其他几个库:3 个库是静态链接的,另外 3 个是动态链接的.它们应该按什么顺序与“my_app"相关联? 但是这些应该按什么顺序链接呢? 假设我们得到了依赖于 libSB 的 libSA(如在静态 A 中)和依赖于 libSB 的 libSC: libSA ->libSB->库 和三个动态库:libDA ->libDB->l ..

如何在 Swift 中进行弱链接?

在 Objective-C 中,如果我想使用只存在于新版本 iOS 中的特定类,我会这样做: if( [UIBlurEffect 类] ) {//用 UIBlurEffect 做一些事情}别的 {//优雅地回退到旧的行为} 然而,等效的 Swift: 如果 UIBlurEffect.self != nil {让模糊:UIBlurEffect = UIBlurEffect(...)//...别 ..
发布时间:2022-01-11 15:06:19 移动开发

链接器是做什么的?

我一直想知道.我知道编译器会将您编写的代码转换为二进制文件,但链接器是做什么的?他们对我来说一直是个谜. 我大致了解什么是“链接".这是对库和框架的引用被添加到二进制文件中的时候.我不明白除此之外的任何事情.对我来说,它“有效".我也了解动态链接的基础知识,但没有太深入. 有人能解释一下这些术语吗? 解决方案 要了解链接器,首先要了解将源文件(例如 C 或 C++ 文件)转换为 ..
发布时间:2022-01-11 14:48:51 C/C++开发

“静态链接"和“动态链接"是什么意思?

我经常听到“静态链接"和“动态链接"这两个术语,通常指的是用 C、C++ 或 C#.它们是什么,它们到底在说什么,它们在链接什么? 解决方案 从源代码(你写的)到可执行代码(你运行的)有两个阶段(在大多数情况下,不考虑解释代码). 首先是将源代码转换为目标模块的编译. 第二个,链接,是将对象模块组合在一起形成可执行文件. 区别在于,除其他外,允许第​​三方库包含在您的可执 ..
发布时间:2022-01-11 14:47:51 C#/.NET

动态链接共享库中的全局变量和静态变量会发生什么情况?

我试图了解当具有全局变量和静态变量的模块动态链接到应用程序时会发生什么.我所说的模块是指解决方案中的每个项目(我经常使用 Visual Studio!).这些模块要么内置在 *.lib 或 *.dll 中,要么内置在 *.exe 本身中. 我了解应用程序的二进制文件包含数据段中所有单个翻译单元(目标文件)的全局和静态数据(如果为 const,则为只读数据段). 当这个应用程序使用带有加 ..
发布时间:2022-01-11 14:47:17 C/C++开发

可分离编译后如何将主机代码与静态 CUDA 库链接?

好的,关于如何正确链接事物,我有一个非常令人不安的 CUDA 5.0 问题.如果能提供任何帮助,我将不胜感激! 使用 CUDA 5.0 的可分离编译特性,我生成了一个静态库 (*.a).通过 nvcc 运行时,这很好地与其他 *.cu 文件链接,我已经这样做了很多次了. 我现在想获取一个 *.cpp 文件,并使用 g++ 或其他方式将其链接到此静态库中的主机代码,但不使用 nvcc.如 ..
发布时间:2022-01-10 15:48:24 其他开发

“没有这样的文件或目录"执行二进制文件时出错

我在 Ubuntu 9.10 x86_64 上安装了一个二进制 Linux 应用程序.该应用程序附带了旧版本的 gzip (1.2.4),该版本是为更旧的内核编译的: $ 文件 gzipgzip:ELF 32 位 LSB 可执行文件,Intel 80386,版本 1 (SYSV),动态链接(使用共享库),用于 GNU/Linux 2.0.0,已剥离 我无法执行此程序.如果我尝试过,就会发生这种 ..
发布时间:2022-01-06 12:35:10 服务器开发

C/C++ 动态链接如何在不同平台上工作?

动态链接通常如何工作? 在Windows(LoadLibrary)上,运行时需要.dll来调用,但是在链接时,需要提供对应的.lib文件,否则程序不会链接....lib文件包含什么?.dll 方法的描述?这不是标题包含的内容吗? 相关地,在 *nix 上,您不需要 lib 文件...编译器如何知道头文件中描述的方法将在运行时可用? 作为新手,当您考虑两种方案中的任何一种时,然后考 ..
发布时间:2022-01-04 21:50:30 C/C++开发

没有头文件的 C 程序

我用 C 编写了“hello world"程序. void main(){ printf("你好世界");}//注意我没有包含任何头文件 程序编译时出现警告 vikram@vikram-Studio-XPS-1645:~$ gcc hello.chello.c:在函数‘main’中:hello.c:2:2: 警告:内置函数‘printf’的隐式声明不兼容vikram@vikram-Studi ..
发布时间:2022-01-04 21:46:04 服务器开发

为什么 gcc 在 x86_64 上编译静态库时不隐式提供 -fPIC 标志

我在编译与静态库静态链接的共享对象时遇到了很多问题.这个问题只出现在 x84_64 平台上.在 x86_32 上做同样的编译工作时,我没有任何问题. 也许这是操作系统特定的 GCC 配置,但我的研究表明 GCC 在 x86_64 平台上是如何工作的.无论如何,我在 Ubuntu 10.04 x86_64 上使用 gcc 4.4.3. 问题是如何解决的?...确保所有静态库依赖项都使用 ..

在 macOS 上打印可执行文件的 rpath

我想使用 install_name_tool 更改可执行文件的 rpath,但我现在不知道 rpath 是什么.install_name_tool 要求在命令行中同时提供旧的和新的 rpath.我可以使用什么命令来打印 macOS 下可执行文件的 rpath? 解决方案 首先,要了解可执行文件不包含单个 rpath 条目,而是包含一个或多个条目的数组. 其次,您可以使用 otool ..
发布时间:2021-12-27 22:57:46 其他开发

共享库的 CMake 和命令依赖链接

我正在构建一些小组件作为主应用程序的共享库.让我们以 liba 和 libb 为例.每个都构建在自己的子目录中,如下所示: add_library(liba SHARED a.cpp) 然后,在根项目文件夹中,我需要将我的主应用程序链接到两者. include_directories(a)include_directories(b)add_executable(dummy dummy.cpp ..
发布时间:2021-12-26 21:56:53 C/C++开发

将 GLEW 与 CMake 联系起来

如何使用 CMake 将 GLEW 链接到项目? 我们一直在尝试使用 CMake 将 GLEW 链接到我们的项目至少 3 小时,但没有任何成功,因此我们接受任何帮助. 我正在使用 CMake 3.1.0 附带的 FindGLEW.cmake CMakeLists.txt find_package(需要 GLEW)如果(GLEW_FOUND)包含目录($(GLEW_INCLUDE ..
发布时间:2021-12-26 21:41:53 其他开发

将 Rust 应用程序与不在运行时链接器搜索路径中的动态库链接

我有一个共享库,我想将其动态链接到几个单独的二进制 Cargo 应用程序中.我使用 -- -L/path/to/dir 格式将它的位置包含在链接器中,应用程序正确编译,二进制大小显着减小.但是,当使用 ldd 检查生成的二进制文件时,我收到一条消息说找不到该库: casey@Gilthar-II:~/bot4/backtester/target/release$ ldd backtesterli ..
发布时间:2021-12-25 09:48:26 其他开发