引用三方dll,编译通过了,但运行时报错:需要强名称程序集

通过https://www.cnblogs.com/dotnet261010/p/12401843.html为dll加上强名称

记录下关键命令:

  1. 生成一个随机的密钥对:sn -k test.snk
  2. 反编译目标程序集:ildasm test.dll /out=test.il
  3. 重新编译,附带强命名参数:ilasm test.il /dll /resource=test.res /key=test.snk /optimize
  4. 验证签名信息:sn -v test.dll
     

本以为OK了,谁知道还是这个报错,通过报错发现是该dll引用了其他没有强名称的dll

然后问题还是没有解决到,脑壳痛

 

上述解决方案只适合dll没有引用其他没有强名称的dll,否则还是会报错的

记录下这个坑,不知道其他人躺过没有

当你在使用 CMake 调用 CerES 进行编译遇到 glog 报错的情况,这可能是由于以下几个原因之一导致的: 1. **未正确链接库** 如果你在项目中启用了 glog 日志功能,并且需要依赖 Google 的 glog 库,则需要确保将 `glog` 正确地添加到项目的依赖项并链接它。如果缺失了该库的路径或链接选项,可能会导致类似“找不到符号”等错误。 2. **头文件配置不当** 确保你的 CMakeLists.txt 文件已包含必要的头文件目录 (`include_directories`) 和目标库 (如通过 `find_package(GLOG)` 或者手动指定) 。例如: ```cmake find_package(Ceres REQUIRED) include_directories(${CERES_INCLUDE_DIRS}) target_link_libraries(your_target ${CERES_LIBRARIES} glog::glog) ``` 3. **版本冲突** 某些情况下,CerES 使用了一个特定版本的 GLog ,而你安装的是另一个版本。这种版本不兼容可能导致一些奇怪的行为或者报错信息。建议检查系统上是否存在多个版本的 glog 安装,并尝试标准化环境下的版本管理工具(比如 vcpkg/conan). 4. **编译标志设置问题** 需要注意的是某些平台对调试和发布模式下编译有特殊需求(macOS/Linux vs Windows)。确认是否开启了正确的宏定义与预处理指令来适配当前系统的特性。 针对以上提到的问题点可以参考下面解决方案步骤逐步排查定位具体原因所在: ### 解决方案 #### 1. 核实CMake配置内容完整性 首先应该保证 CMake 中关于 ceres solver 及其所需辅助组件(gflags,glog...)均已正确定义清楚;同也要关注各部分之间的相互作用关系。 ```bash # 示例命令用于验证安装好的包是否正常工作. cmake_minimum_required(VERSION 3.x) project(example) set(CMAKE_CXX_STANDARD 17) find_package(Ceres REQUIRED COMPONENTS Eigen SparseLinearAlgebraLibrary SuiteSparse) add_executable(main main.cpp) target_include_directories(main PRIVATE ${CERES_INCLUDE_DIRS}) if(TARGET glog::glog) message("Found glog!") endif() target_link_libraries(main ${CERES_LIBRARIES} glog::glog ...) ``` 注意替换 `${...}` 占位符为你实际环境中对应值. #### 2. 测试单一模块独立运行状况 创建最小化重现案例(minimal reproducible example),只保留涉及 ceres + glog 相关代码段落单独测试看能否成功生成结果再逐层叠加复杂度直至完整工程恢复为止。 #### 3. 更新相关软件至最新稳定版次 有候旧版可能存在 bug 导致异常现象发生,所以考虑升级所有关联三方库包括但不限于 gcc/g++、python-pip等等都保持更新状态有助于减少潜在风险隐患.
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值