[英]Undefined reference when linking static libraries
我有幾個使用avr-ar創建的庫。 每個都包含一些對象。
library1中的對象需要來自library2中對象的符號。 問題是,當我嘗試編譯全部內容時,會遇到undefined reference
問題。
這就是失敗的地方,$(INCLUDE)$(CFLAGS)$(LIBS)沒有任何幻想
CFLAGS=-mmcu=atmega328p -DF_CPU=16000000UL -Os -w -funsigned-char -funsigned-bitfields -fpack-struct -fshort-enums
LIBS=library1.a library2.a
$(CXX) $(INCLUDE) $^ $(CFLAGS) -o $@ $(LIBS)
我正在運行Ubuntu 12.04和
Using built-in specs.
COLLECT_GCC=avr-g++
COLLECT_LTO_WRAPPER=/usr/lib/gcc/avr/4.5.3/lto-wrapper
Target: avr
Configured with: ../src/configure -v --enable-languages=c,c++ --prefix=/usr/lib --infodir=/usr/share/info --mandir=/usr/share/man --bindir=/usr/bin --libexecdir=/usr/lib --libdir=/usr/lib --enable-shared --with-system-zlib --enable-long-long --enable-nls --without-included-gettext --disable-libssp --build=x86_64-linux-gnu --host=x86_64-linux-gnu --target=avr
Thread model: single
gcc version 4.5.3 (GCC)
如果我從庫中提取對象並將其全部放入庫中,那么一切都會順利進行。
我想將它們分開,有沒有辦法做到這一點?
您可以嘗試通過對庫進行分組來使鏈接器進行遞歸鏈接。 我沒有檢查以下內容,但可能會更改:
LIBS=library1.a library2.a
至
LIBS=-Wl,--start-group library1.a library2.a -Wl,--end-group
這將導致鏈接器來回移動,直到定義了所有符號為止,這會增加鏈接器的性能成本。 當兩個庫相互依賴時,這很有用,因為鏈接程序通常只將每個文件傳遞一次。
希望這可以幫助
因為您說library1取決於來自library2的引用,所以您的LIBS = library1.a library2.a需要更改為LIBS = library2.a library1.a
在編譯過程中,符號是從列出的庫的左到右順序進行解析的,因此,如果您依賴library1.a中的library2.a,則需要首先提供library2.a。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.