2014-10-17 140 views
0

我遇到了一些與我的動態庫有關的編譯問題。它應該鏈接到main.c,但是對於所有對它的引用,我都會收到「對function_name的未定義引用」。未定義的引用和鏈接庫

main.c的內容並不那麼重要;我包括我的庫:

#include "matrix.h" 

然後,我有一個簡單的Makefile鏈接兩個。

#Variables 
LIB = matrix 

# Usual compilation flags 
CFLAGS = -std=c99 -Wall -Wextra -g 
CPPFLAGS = -I../include -DDEBUG 
LDFLAGS = -lm 

# Special rules and targets 
.PHONY: all clean help 

all: $(LIB).o libmatrix.so main 

$(LIB).o: $(LIB).c $(LIB).h 
    $(CC) $(CFLAGS) $(CPPFLAGS) -fPIC -c -o [email protected] $< 

libmatrix.so: $(LIB).o 
    $(CC) $(CFLAGS) -fPIC -shared -o [email protected] $< $(LDFLAGS) 

main: main.o libmatrix.so 
    $(CC) $(CFLAGS) -o [email protected] $< -L -lmatrix 

任何人都可以指導我到哪裏我可能會出錯嗎?提前謝謝了。

+0

請發佈編譯錯誤結果。 – MajorBetaVictory 2014-10-17 07:07:21

+2

...包括'make'運行發出的實際命令(應該回顯給終端)。 – WhozCraig 2014-10-17 07:08:20

回答

4

你可能想-L.-L在你的上線,所以:

main: main.o libmatrix.so 
    $(CC) $(CFLAGS) -o [email protected] $< -L. -lmatrix 

你應該閱讀Program Library HOWTODrepper's paper: How to Write Shared Libraries;您可能需要設置在鏈接時一定-rpath(可能使用-Wl,-rpath,. ...),你可能會想-rdynamic ....

或者鏈接,設置您的LD_LIBRARY_PATH環境變量包含.(我不推薦),或者在/usr/local/lib/中安裝共享庫(並將其添加到/etc/ld.so.conf,然後運行ldconfig)。另請參閱dlopen(3),environ(7),ld.so(8), ldconfig(8)

+0

這不是以前的工作,但現在不知何故。無論如何,我現在有一個錯誤「./main:加載共享庫時出錯:libmatrix.so無法打開共享對象文件:沒有這樣的文件或目錄」 – 2014-10-17 07:16:55

相關問題