簡體   English   中英

MYSYS2 mingw64 gcc 無法鏈接共享庫

[英]MYSYS2 mingw64 gcc can't link Shared Libary

冰雹,

我正在嘗試將已編譯的共享庫鏈接到 main,它告訴我它找不到該庫 - 盡管鏈接到不同文件夾中的同名 static 庫沒有問題。 在嘗試鏈接到不在當前目錄中的庫之前,我還可以創建一個共享庫並正確鏈接到它。

也許我編譯錯了,但這是我使用的 make 文件:

Makefile 用於外部庫:

all: objects libalpha.so libalpha.a

objects:
    gcc -fPIC -c file1.c file2.c

#shared lib
libalpha.so: objects
    gcc -shared -fPIC -Wl,-soname,C:\libs\libc\lib\shared\alpha.so -o C:\libs\libc\shared\libalpha.so file1.o file2.o

#static lib
libalpha.a: objects
    ar rcs C:\libs\libc\static\libalpha.a file1.o file2.o

這是 makefile 用於在嘗試鏈接到外部庫之前可以工作的主要/內部庫:

all: libtest libtwo libgroup.so libgroup.a main.o main_static main_shared

libtest: ./sub/libtest.c ./sub/libtest.h
    gcc -fPIC -c ./sub/libtest.c -o ./sub/libtest.o

libtwo: ./sub/libtwo.c ./sub/libtwo.h
    gcc -fPIC -c ./sub/libtwo.c -o ./sub/libtwo.o

#shared - compiles and links properly
libgroup.so: ./sub/libtest.o ./sub/libtwo.o
    gcc -shared -fPIC -Wl,-soname,./sub/libtest.o ./sub/libtwo.o -o ./sub/libgroup.so

#static - compiles and links properly
libgroup.a: ./sub/libtest.o ./sub/libtwo.o
    ar rcs ./sub/libgroup.a ./sub/libtest.o ./sub/libtwo.o

#direct where the header files are located
main.o: main.c
    gcc -IC:\libs\libc\CODE\alpha -c main.c

#compiles fully and works
main_static: main.o ./sub/libgroup.a
    gcc main.o -L./sub -lgroup -LC:\libs\libc\static -lalpha -o main_static

#doesn't work man??
main_shared: main.o ./sub/libgroup.so
    gcc main.o -L./sub -lgroup -LC:\libs\libc\shared -lalpha -o main_shared

這是錯誤:

ld.exe: cannot find -lalpha
collect2.exe: error: ld returned 1 exit status
make: *** [makefile:27: main_shared] Error 1

並確認它們存在:

    Directory: C:\libs\libc\shared


Mode                LastWriteTime         Length Name
----                -------------         ------ ----
-a----         1/1/2022   4:19 AM         224820 libalpha.so


    Directory: C:\libs\libc\static


Mode                LastWriteTime         Length Name
----                -------------         ------ ----
-a----         1/1/2022   4:19 AM           2324 libalpha.a

看到什么明顯的東西了嗎?

感謝您的洞察力。

我看到各種錯誤;

  1. 您正在生成 position 獨立機器代碼 (-fPIC)。 這僅在 UNIX 機器(BSD,Linux,...)中需要,但在 Windows 上不需要。 (去掉它。)
  2. 正如@ssbssa 所指出的,Windows 中的共享庫以“.dll”結尾,而不是“.so”。
  3. Windows 中的可執行文件以“.exe”結尾(最后兩個目標)。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM