问题标签 [dynamic-linking]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
exception - Inter-module exception name resolution through boost python does not work?
Here is my problem:
I have two C++ modules, A and B, which are built as dynamically-linked libraries. A offers basic math functions, and custom exception types. B is a higher level module that uses A.
B::someFunction() calls a function from A, and tries to catch custom exception A:MyExceptionFromA in order to convert it into a custom type B:MyExceptionFromB (since users of module B do not need to know about the implementation details of A).
Everything works fine as long as I remain in the C++ domain. However, if I expose B::someFunction() in python via boost python, the exception is not caught anymore in the C++ module.
I can catch std::runtime_error, from which A:MyExceptionFromA derives, and call typeid(e).name() to get the retrieve the correct mangled name, so I know the correct exception is thrown. Therefore I suspect that the problem comes from resolving this mangled symbol into the correct exception type.
I have found this link, which explains that "python uses [the insular] model to open extension modules, so that extension module writers don't need to know what symbols other extension modules might be using.". I'm suspecting this is part of the problem/solution, but I do not know enough about symbol resolution to figure out how to solve my problem.
Any ideas?
xcode - 链接被顶起..什么是-rpath?macOS X
所以,我正在构建一个项目,它使用来自已编译库(.dylib 或 .so)的函数。我在适当的位置有头文件和库文件(这是 QtRoot 的所有部分,顺便说一句),但是当我尝试在 Xcode 中构建我的项目时,我得到一个调试器错误:
dyld:库未加载:@rpath/libRIO.so 引用自:/Users/paulthompson/Documents/Programming/Build Products/Debug/MacHeliosSim.app/Contents/MacOS/MacHeliosSim 原因:找不到图像 sharedlibrary apply-load-rules all数据格式化程序暂时不可用,将在“继续”后重试。(目前无法调用加载器,已锁定。)
现在,如果我从 Finder 打开它,构建的程序本身将运行得很好,但是每当我尝试从 Xcode 运行它时,它就会向我吐口水。这个 rpath 是什么东西,为什么调试器找不到库,即使 Xcode 本身知道它们在哪里,而且显然从 Finder 运行的程序也可以找到它们?
mfc - 将 BOOST 1.35 升级到 1.43 会导致 __pRawDllMain 的链接器错误(mfc 相关)
在工作中,我们有一个使用 1.35 构建良好的 MFC 扩展 DLL,但使用 1.43 构建时会导致以下错误:
如果我激活 BOOST_LIB_DIAGNOSTIC 旧的构建列表:
和
所以没有改变与哪个库链接
完整的错误信息是:
我在两个库版本中对 tss_pe.cpp 做了一个差异,它们是相同的,所以我不确定问题是什么。
您可以通过定义让消息消失,BOOST_THREAD_USE_DLL
但是我们需要发送 BOOST_THREAD-VC71-MT-GD-1_43.DLL 所以我认为这不是最好的解决方案。
python - Python ctypes 未在 Mac OS X 上加载动态库
我有一个 C++ 库repeater.so
,可以通过以下方式在 Linux 中从 Python 加载:
但是,当我在 Mac OS X(Snow Leopard,32 位)上编译相同的库并获取repeater.dylib
,然后在 Python 中运行以下命令时:
我收到以下错误:
我是否必须做一些不同的事情才能在 Mac OS X 上的 Python 中加载动态库?
c++ - C++ -fvisibility=hidden -fvisibility-inlines-hidden
我对 C++ 可见性属性有疑问。我已经阅读了http://gcc.gnu.org/wiki/Visibility,但我不太明白它是如何工作的。
我想使用可见性隐藏在我拥有的一些共享库中。我相信这意味着符号是隐藏的?
那么你打算如何链接共享库呢?有什么特别的方法吗?如果我链接它通常如何链接它不起作用。
有人能帮助我吗。
c++ - 混合静态和动态(共享)库?
我正在使用三个不同的库,一个核心(可以编译为静态或 DLL)、图形(可以编译为静态或 DLL - 处理 Ogre)、物理(只能由于许可而编译为静态 - Havok)。然后,项目根据需要使用库的组合。Physics部分依赖于Graphics和Core的某些功能,而Graphics依赖于Core的某些功能。该项目适用于调试和发布中静态链接的所有库。使用Core的动态链接库时出现以下错误图形,但静态链接的物理库。
错误 1 错误 LNK2005: "public: unsigned int __thiscall OgreFW::FwErrorLog::GetError(void)" (?GetError@FwErrorLog@OgreFW@@QAEIXZ) 已在 FwCore_d_dll.lib(FwCore_d.dll) FwHavok_d.lib 中定义
我可以看到错误的含义,但我对如何规避这一点感到困惑。如果我的库像这样相互依赖,并且物理引擎(Havok)的许可只允许静态链接,我是否需要重新考虑我的设计(这是一个大问题:()或者有没有办法解决它?
谢谢
编辑:我已经检查过所有的库都是用MDd编译的
EDIT2:我可以使用/FORCE:MULTIPLE
,但这是隐藏问题而不是解决它
EDIT3:为多次编辑道歉。函数GetError()在头文件中定义,如果我将它放在源文件中,链接错误就会消失。这是为什么?
c - 将“太多”参数传递给外部函数是否安全?
这种情况只能在没有名称修饰的情况下发生(我相信),所以下面的代码是 C。假设在 Ac 中有一个函数 A 定义为
现在还有一个单独的文件 Bc:
A 最初被声明为只有 2 个参数,但在 Bc 中声明时它有一个额外的参数,并且在 B() 中用第三个参数调用它。我知道有可能发生这种情况,例如在与 fortran 子例程链接时,或者在动态链接时。
我想将额外的参数传递给函数是不安全的,谁能解释当调用函数并将参数传递给它时内存中发生了什么?因此,传递这个既不使用也不想要的“额外”参数是多么安全。
额外的参数是否有可能覆盖函数中使用的内存空间?还是对 A 的函数调用为参数分配内存空间,然后告诉 A 参数内存块的开头在哪里,A 读出前两个参数并忽略最后一个参数,使其完全安全?
任何有关该功能的信息都会非常有启发性,谢谢。
c - 如何跟踪应用程序正在动态加载哪些库?
我有一个应用程序(我没有源代码)。
我知道它旨在根据命令行参数动态加载共享库。
我知道它应该加载哪个库,并且我已将 LD_LIBRARY_PATH 设置到适当的目录。
该应用程序在一台服务器上运行没有任何问题,但不能在另一台服务器上运行。
我试图找出原因,如果我可以确认脚本正在寻找我认为它是的库并且我可以跟踪它在哪里寻找,这将是有帮助的。
有什么工具可以帮助我吗?我一直在谷歌搜索,但我发现的大部分信息ldd
实际上只告诉你关于静态链接库的信息。
这是在 Linux 环境中,应用程序和库都是用 C 编写的
谢谢
.net - FileNotFoundException 试图从托管代码加载 DLL
首先,我想说我对 Windows 链接系统相当陌生。(我的大部分编程经验都是在 Mac OS 上获得的,在 Mac OS 上,链接库和框架完全不同。我也不是 Windows 用户。)
这是我的设置:我在同一个解决方案中有两个项目。第一个是我们将调用的 C++/CLI 项目Foo
。Foo
是一个依赖于外部库(Java 运行时环境)的库项目,因此对适当的(我相信因为它可以编译).lib 文件具有适当的引用。(我没有更改与加载该库相关的其他项目设置。)我的另一个项目Bar
是一个 C# 控制台可执行项目,它引用Foo
.
两者都编译得很好。
但是,当我执行我的Bar.exe
C# 程序时,它在构造第一个需要来自Foo
. 异常是FileNotFoundException
表示Foo.dll
找不到程序集或其依赖项之一。
所以我开始fuslogvw
看看出了什么问题,但我真的不明白它是如何工作的,而且我在上面找到的文档也没什么帮助。据我所知,两者都Foo
无法Bar
加载为本机图像,但被发现是正确的 IL 并以这种方式正确加载。但是,没有其他有关失败的相关提及,显然它确实在某些时候失败了。我会发布日志,但它们是法语的,我认为这将毫无用处。
任何的想法?
c - C (lib*.so) 库中的动态链接
我编写了一个代码,其中将一个可执行文件和 [lib*.so] 库作为我的参数并链接@ Run-time。
我还想在 (*.o) 文件@run-time 中获取函数并将其链接。但我不知道该怎么做。
编辑 1: 我试图链接的函数是 lib*.so 库中 .o 文件的一部分。 所以我想指定库名称以及位于同一库@Run-Time 中的函数名称。
例如。如果我的库包含两个函数(即 *.o 文件),链接器应该编译我想使用@Run-Time 的函数。
我已经发布了代码,请帮助: