簡體   English   中英

Makefile-將靜態庫鏈接到動態庫

[英]Makefile - Link static libraries to a dynamic library

假設我具有以下層次結構的文件夾:

main
  dir1
    file1.cpp/h
    file2.cpp/h
    makefile
  dir2
    file3.cpp/h
    makefile
  makefile

現在,每個內部makefile會將文件編譯為目標文件,並創建一個靜態庫(* .a)

我想從那些靜態庫中構建一個共享庫(動態庫)(我們稱它們為libdir1.a,libdir2.a

我在makefile上嘗試了此規則,但我接受了此錯誤:

CC = g++

LDFLAGS = -shared
TARGET = libprog.so

$(TARGET): file1.o file2.o file3.o
         $(CC) $(LDFLAGS) -o $@ -Wl,-whole-archive -ldir1 -ldir2 -Wl,-no-whole-archive

(compiler output)
    libdir2.a: member libdir2.a(file1.h) in archive is not an object

我不知道該錯誤是由於歸檔文件的錯誤構建還是由於makefile的目標規則錯誤引起的。

每個歸檔文件都是按照以下規則構建的:

$(TARGET): [list_of_obj_files_that_were_created_on_this_dir]
    ar -r -o $@ $^

問題是我不小心將“ h”文件包含在存檔中。 這是因為我使用了一個變量來存儲目標文件,但是我沒有很好地將數據放在其上,所以我認為該變量僅包含.o文件,但實際上它也包含.h文件。

暫無
暫無

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

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