我想知道我将如何正确设置一个 C++/CLI 库来包装具有多个依赖项的 native c++ 代码。我已经尝试静态和动态地将 native 库链接到它的依赖库,但没有成功。
Managed C++/CLI dll 构建得很好,可以作为对 C# 项目的引用添加。但是,当我尝试使用任何已定义的类时,我会收到 BadImageFormatException 或 FileNotFoundException,具体取决于我的链接方式。我相信我需要在 CLI 库中指定依赖库,以便将其加载到 list 中,但我不确定该过程。也因为我知道它会出现,所以我已经验证所有涉及的库都构建在 x86 架构上。
最佳答案
我发现了问题,现在一切正常。这是几个不正确的事情同时发生的组合。
如果有人遇到同样的问题,我通过设置以下内容解决了它:
1) 被引用的 Boost 库(特别是 boost_thread)需要使用 BOOST_THREAD_USE_DLL 预处理器进行编译(其他 boost 库可能需要 BOOST_ALL_DYN_LINK 来动态链接所有内容)。这显然是一个常见问题。
2) 我验证了所有依赖项都在系统路径中(就像 R Ubben 重申的那样)
3) 我使用 DependencyWalker(来自 sourceforge 的 depends.exe)来分析我编译的托管 DLL。事实证明,正在使用的 libpq.lib 库实际上引用了不包含在 lib 文件夹中但包含在 bin 文件夹中的其他 DLL。因此需要将其添加到路径中。
4) 我的包装器的一部分使用了列表的#include header 。这迫使我的库链接到 2.0 框架依赖库。这与我的 4.0 客户端 objective-c # 应用程序不兼容。这只是通过编译时的警告解析才知道的(以前由于 C++ 生成太多而被隐藏……我知道这很愚蠢)。然而,这导致抛出 System.BadImageFormateException,尽管一切都针对相同的 x86 架构。
希望对遇到同样问题的其他人有所帮助。 BadImageFormateException 和 FileNotFoundException 完全过于模糊和无益。
关于c# - 我将如何使用 C++/CLI dll 将 native 代码与 C# 中的多个依赖库一起包装?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3302306/