当前位置: 技术问答>linux和unix
共享库.so怎么生成与使用?
来源: 互联网 发布时间:2015-09-08
本文导语: Hi, 用cc -shared -o libmytest.so func1.o func2.o ...生成的libmytest.so, 调用时一定要用dlfcn.h,dlopen, dlsym, dlclose等才能调用吗? 我想生成共享库,别的程序只要用cc ... -lmytest link,然后在自己的程序中就可以很简单地直接...
Hi,
用cc -shared -o libmytest.so func1.o func2.o ...生成的libmytest.so,
调用时一定要用dlfcn.h,dlopen, dlsym, dlclose等才能调用吗?
我想生成共享库,别的程序只要用cc ... -lmytest link,然后在自己的程序中就可以很简单地直接调用.so中定义的函数。
有人说Linux下库有3种:静态,共享和动态连接。我觉得我需要的应该是第2种吧。
请高手指点一下。谢谢!
用cc -shared -o libmytest.so func1.o func2.o ...生成的libmytest.so,
调用时一定要用dlfcn.h,dlopen, dlsym, dlclose等才能调用吗?
我想生成共享库,别的程序只要用cc ... -lmytest link,然后在自己的程序中就可以很简单地直接调用.so中定义的函数。
有人说Linux下库有3种:静态,共享和动态连接。我觉得我需要的应该是第2种吧。
请高手指点一下。谢谢!
|
创建和使用so的例子:
文件line.h和line.cpp定义了类CLine,我们想把这两个文件做成so库供别人使用,则
写Makefile如下:
libline.so: line.o
g++ -shared -o libline.so line.o
cp libline.so /usr/lib #we copy libline.so to /usr/lib ldconfig #update configure file
line.o: line.cpp line.h
g++ -c -g -w line.cpp
clean:
rm -rf line.o libline.so /usr/lib/libline.so
假设我们有一个程序test.cpp想用这个so库,首先在test.cpp中包含line.h文件,
然后写Makefile如下:
INCPATH = -I./lib -I./
COMPILE = g++ $(INCPATH) -c -g -Wall -W
all: test.o
g++ -o run test.o -lline #-lline means link /usr/lib/libline.so
test.o: test.cpp
$(COMPILE) test.cpp
clean:
rm -rf test.o run
如有不对的地方还请指正
文件line.h和line.cpp定义了类CLine,我们想把这两个文件做成so库供别人使用,则
写Makefile如下:
libline.so: line.o
g++ -shared -o libline.so line.o
cp libline.so /usr/lib #we copy libline.so to /usr/lib ldconfig #update configure file
line.o: line.cpp line.h
g++ -c -g -w line.cpp
clean:
rm -rf line.o libline.so /usr/lib/libline.so
假设我们有一个程序test.cpp想用这个so库,首先在test.cpp中包含line.h文件,
然后写Makefile如下:
INCPATH = -I./lib -I./
COMPILE = g++ $(INCPATH) -c -g -Wall -W
all: test.o
g++ -o run test.o -lline #-lline means link /usr/lib/libline.so
test.o: test.cpp
$(COMPILE) test.cpp
clean:
rm -rf test.o run
如有不对的地方还请指正
|
to generate so file and corresponding .a file, using following command:
g++ $^ -shared -L$(LIBDIR) -o $(OUTDIR)/libXXX.so -Wl,
--out-implib=$(LIBDIR)/libXXX.a
-Wl,--no-whole-archive $(DEPENDS)
g++ $^ -shared -L$(LIBDIR) -o $(OUTDIR)/libXXX.so -Wl,
--out-implib=$(LIBDIR)/libXXX.a
-Wl,--no-whole-archive $(DEPENDS)
|
不需要dlfcn.h,dlopen, dlsym, dlclose,调用时直接加上-lmytest就可以了,不过要给出.so的路径-L……
|
直接连接也可以用!包涵头文件
|
linux共享库
起个名字叫 libmytest.so 就行了
起个名字叫 libmytest.so 就行了
|
同意1楼,
还要在LD_LIBRARY_PATH里加上.so的路径,运行时才不会报错。
还要在LD_LIBRARY_PATH里加上.so的路径,运行时才不会报错。