I madeC programs named drive.c and mylib.c.

drive.c is main module mylib.c is sub modulle that I want work as shared library .

I can compile them with this step on 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

Finally I did drive.exe

Then Windows Dialog Message was shown program can start because libmylib.so.1.0.1 is missing.

LD_LIBRARY_PATH is set.

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

$

And there is 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

If I copied libmylib.so.1.0.1 in same directory of drive.exe,drive.exe can run.

How Can I tell the system where libmylib.so.1.0.1 is?

有帮助吗?

解决方案

Windows doesn't use LD_LIBRARY_PATH. Your shared library DLL will need to be in the same directory as drive.exe or in a directory in the PATH.

The full details of Windows' DLL search is documented here:

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top