V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
V2EX 提问指南
kanhongj
V2EX  ›  问与答

Windows 下编译有 Wl,repath 吗?

  •  
  •   kanhongj · 2022-07-22 12:00:41 +08:00 · 650 次点击
    这是一个创建于 615 天前的主题,其中的信息可能已经有所发展或是发生改变。

    当前想尝试 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 文件同一目录下才能运行。

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

    源代码

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

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

    Cmake 我不太熟,需要你自己去配置了
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   我们的愿景   ·   实用小工具   ·   3146 人在线   最高记录 6543   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 27ms · UTC 12:36 · PVG 20:36 · LAX 05:36 · JFK 08:36
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.