在运行时链接外部库

Posted

技术标签:

【中文标题】在运行时链接外部库【英文标题】:Linking external library in runtime 【发布时间】:2017-08-22 23:05:51 【问题描述】:

我正在尝试编译使用 FMOD 和 CMake 的简单程序。编译似乎没问题,但我的应用程序因0xC0000135 而崩溃,这是 STATUS_DLL_NOT_FOUND

我的 CMakeList.txt

cmake_minimum_required(VERSION 3.7)
project(fmod-test)

set(FMOD_DIR "D:/FMOD SoundSystem/FMOD Studio API Windows")
set(CMAKE_CXX_STANDARD 11)

set(SOURCE_FILES main.cpp)

add_executable(fmod-test $SOURCE_FILES)

include_directories($FMOD_DIR/api/lowlevel/inc $FMOD_DIR/api/studio/inc)

link_directories("$FMOD_DIR/api/lowlevel/lib" "$FMOD_DIR/api/studio/lib")
target_link_libraries(fmod-test
    "$FMOD_DIR/api/lowlevel/lib/fmod_vc.lib"
    "$FMOD_DIR/api/studio/lib/fmodstudio_vc.lib")

这是我的 cmake 配置或环境的问题吗? 我应该将 DDL 放在某个特定的位置还是在 CMakeLists.txt 旁边的某个地方提供指向它们的路径?

【问题讨论】:

不是 windows 的人,但作为第一次尝试,尝试将 dll 放在可执行文件旁边,如果我没记错的话,这是 windows 看起来的第一个位置。我不确定如何设置 dll 的其他搜索路径 如果 exe 位于不同的位置,还可以更新 'path' 环境变量以包含 dll 的路径 - 但您要跟踪,尽量避免 dll hell 感谢 krv,帮了大忙 【参考方案1】:

通过将api/lowlevel/libapi/studio/lib 添加到PATH 变量来解决。

感谢 kvr 的建议。

【讨论】:

以上是关于在运行时链接外部库的主要内容,如果未能解决你的问题,请参考以下文章

在运行时动态加载库时出现“未解析的外部符号”错误

交叉编译时如何使用外部库?

gcc新版本号引起的编译错误(命令运行时的外部库输入位置)

在自定义目标运行后重建依赖目标

iOS:在真实设备上运行项目时出错

更改运行时库选项对运行时链接的影响