我的动态库遇到了一些编译问题。它应该链接到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 $@ $<
libmatrix.so: $(LIB).o
$(CC) $(CFLAGS) -fPIC -shared -o $@ $< $(LDFLAGS)
main: main.o libmatrix.so
$(CC) $(CFLAGS) -o $@ $< -L -lmatrix
任何人都可以指引我到可能出错的地方吗?非常感谢提前。
答案 0 :(得分:4)
您可能希望在最后一行中-L.
而不是-L
,所以:
main: main.o libmatrix.so
$(CC) $(CFLAGS) -o $@ $< -L. -lmatrix
您应该阅读Program Library HOWTO和Drepper'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)