c - DL_LIBRARY_PATH 不起作用

标签 c windows mingw shared-libraries

我制作了名为 drive.c 和 mylib.c 的 C 程序。

drive.c 是主模块 mylib.c 是我想作为共享库工作的子模块。

我可以在 MINGW 上通过这一步编译它们

gcc –fPIC –g –c –Wall mylib.c 

gcc -shared -Wl,-soname,libmylib.so.1 -o /c/opt/lib/libmylib.so.1.0.1 mylib.o -lc

gcc -g -Wall -Wextra -pedantic  -I./ -L/c/opt/lib -o drive.exe drive.c –l:libmylib.so.1

最后我做了 drive.exe

然后显示 Windows 对话框消息 程序可以启动,因为缺少 libmylib.so.1.0.1

LD_LIBRARY_PATH 已设置。

$ set|grep LD
LD_LIBRARY_PATH=:/c/opt/lib

$

还有libmylib.so.1.0.1

$ ls -la /c/opt/lib
total 98
drwxr-xr-x 2 JAC484 Administrators  4096 Mar 18 14:44 .
drwxr-xr-x 7 JAC484 Administrators  4096 Mar 14 15:47 ..
-rwxr-xr-x 1 JAC484 Administrators 45356 Mar 18 14:23 libmylib.so.1
-rwxr-xr-x 1 JAC484 Administrators 45356 Mar 18 14:23 libmylib.so.1.0.1

如果我将 libmylib.so.1.0.1 复制到 drive.exe 的同一目录中,drive.exe 可以运行。

如何告诉系统 libmylib.so.1.0.1 在哪里?

最佳答案

Windows 不使用 LD_LIBRARY_PATH。您的共享库 DLL 需要与 drive.exe 位于同一目录中或位于 PATH 中的目录中。

此处记录了 Windows 的 DLL 搜索的完整详细信息:

关于c - DL_LIBRARY_PATH 不起作用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22472876/

相关文章:

windows - 我的 groovy 库在哪里?

c++ - 交叉编译时包含外部库

mingw - 使用 MinGW 在 Windows 上构建 GLEW 1.7.0

c - 在 C 中的 printf() 中将 int 类型转换为 char

使用 select() 连续读取 FIFO

C静态数组初始化和圈复杂度

windows - 有没有办法通过检测功耗而不是设备驱动程序来检测 USB 设备是否已插入?

将 float 转换为 C 中的科学记数法(非标准格式)?

javascript - 无法设置未定义或空引用的属性 'onclick'

c++ - 我可以将 MSVCRT 静态链接到 mingw 吗?