Windows 下编译有 Wl,repath 吗?

2022-07-22 12:00:41 +08:00
 kanhongj

当前想尝试 SDL 库的使用

目录结构为这样:


SDL_C++
├─ CMakeLists.txt
├─ hello_world.bmp
├─ src
│    ├─ CMakeLists.txt
│    ├─ sdl_1_test.cpp
│    └─ sdl_1_test.h
└─ third_party
       ├─ SDL_x86_32
       └─ SDL_x86_64

编译 sdl_1_test 时候,我在 CMakeLists.txt 加了一句:

set(CMAKE_EXE_LINKER_FLAGS "${CMAKE_EXE_LINKER_FLAGS} -Wl,-rpath=./third_party/SDL_x86_32/lib -lSDL2")
SDL_x86_32
├─ bin
│    ├─ SDL2.dll
│    ├─ app1.exe
│    └─ sdl2-config
├─ include
│    └─ SDL2
├─ lib
│    ├─ cmake
│    ├─ libSDL2.a
│    ├─ libSDL2.dll.a
│    ├─ libSDL2.la
│    ├─ libSDL2_test.a
│    ├─ libSDL2_test.la
│    ├─ libSDL2main.a
│    ├─ libSDL2main.la
│    └─ pkgconfig
└─ share
       └─ aclocal

但最终编译出来的 exe 文件并没链接上 bin 里边的 SDL2.dll, 运行还是会提示 找不到 SDL2 库。需要将 SDL2.dll 和 编译出的 exe 文件同一目录下才能运行。

觉得说的不太清楚的可以配合一下源代码看一下,感谢观看到这里

源代码

676 次点击
所在节点    问与答
2 条回复
ysc3839
2022-07-22 12:10:47 +08:00
没有。如果你想加载别的目录的 DLL ,可以把这个 DLL 设置成 delay load ,然后程序启动时调用 AddDllDirectory 或 SetDllDirectory 加入对应目录,然后再调用 DLL 中的函数。
printese
2022-07-23 21:26:43 +08:00
感觉你想要的效果是静态编译

如果是直接用 g++编译的话,直接加上-static 选项就行

Cmake 我不太熟,需要你自己去配置了

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/867965

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX