当前位置: 技术问答>linux和unix
Linux编写DLL
来源: 互联网 发布时间:2015-05-09
本文导语: 有那位在Linux编写过DLL,给点怎么编写它的基本步骤与方法及其如何调用的! 谢谢! | 在linux下的动态连接库不叫DLL而叫做SO(shared object) 做法和普通静态库一样,只是在编译的时候使用: gcc -L. -...
有那位在Linux编写过DLL,给点怎么编写它的基本步骤与方法及其如何调用的!
谢谢!
谢谢!
|
在linux下的动态连接库不叫DLL而叫做SO(shared object)
做法和普通静态库一样,只是在编译的时候使用:
gcc -L. -D_REENTRANT -fPIC -c -o yourlib.o yourlib.c
gcc -shared -Wl,-soname,libyourlib.so.1.0.0 yourlib.o
这样就产生了你的so: libyourlib.so
然后连接应用程序时使用:
gcc -o yourapp yourapp.c -lyourlib
就产生了可执行文件 yourapp
在执行以前先执行命令:
export LD_LIBRARY_PATH=yourpath(你的.so所在的路径)
./yourapp
就可以了。
做法和普通静态库一样,只是在编译的时候使用:
gcc -L. -D_REENTRANT -fPIC -c -o yourlib.o yourlib.c
gcc -shared -Wl,-soname,libyourlib.so.1.0.0 yourlib.o
这样就产生了你的so: libyourlib.so
然后连接应用程序时使用:
gcc -o yourapp yourapp.c -lyourlib
就产生了可执行文件 yourapp
在执行以前先执行命令:
export LD_LIBRARY_PATH=yourpath(你的.so所在的路径)
./yourapp
就可以了。
|
呵呵,上面这位老兄说的对
不过偶以前总结了一个文档,更仔细一点,希望能对你有帮助
在linux下编写动态链接库的步骤:
1.编写库的头文件和源文件.
2.把所有涉及到的源文件用如下方式编译为目标文件:
g++/gcc -g -c -fPIC -o library1.o library1.cpp
g++/gcc -g -c -fPIC -o library2.o library2.cpp
......
......
3.把所有的目标文件链接为动态库:
g++/gcc -g -shared -Wl,-soname,lib***.so,-o lib***.so.1.0.0, library1.o library2.o .... -lc
4.建立一个库名链接
ln -s lib***.so.1.0.0 lib***.so
现在你就可以引用库了.下面我分别给出简单例子告诉你如何动态和静态使用动态库:
假如你的应用程序源代码叫testlib.cpp
采用如下方式编译:
g++ -g -o testlib testlib.cpp -ldl
////////这个例子告诉你如何动态的调用.so库
testlib.cpp
#include
#include
#include ...
int main()
{
void *handle=NULL;
//define a pointer which will point to the function in the lib you want to use.
YourFuntionType (*pFunc)(YourFunctionPerameterList........);
//open the lib you want to use.
handle=dlopen("/../../../yourlib.so",RTLD_LAZY);
if(handle==NULL)
{
cout
不过偶以前总结了一个文档,更仔细一点,希望能对你有帮助
在linux下编写动态链接库的步骤:
1.编写库的头文件和源文件.
2.把所有涉及到的源文件用如下方式编译为目标文件:
g++/gcc -g -c -fPIC -o library1.o library1.cpp
g++/gcc -g -c -fPIC -o library2.o library2.cpp
......
......
3.把所有的目标文件链接为动态库:
g++/gcc -g -shared -Wl,-soname,lib***.so,-o lib***.so.1.0.0, library1.o library2.o .... -lc
4.建立一个库名链接
ln -s lib***.so.1.0.0 lib***.so
现在你就可以引用库了.下面我分别给出简单例子告诉你如何动态和静态使用动态库:
假如你的应用程序源代码叫testlib.cpp
采用如下方式编译:
g++ -g -o testlib testlib.cpp -ldl
////////这个例子告诉你如何动态的调用.so库
testlib.cpp
#include
#include
#include ...
int main()
{
void *handle=NULL;
//define a pointer which will point to the function in the lib you want to use.
YourFuntionType (*pFunc)(YourFunctionPerameterList........);
//open the lib you want to use.
handle=dlopen("/../../../yourlib.so",RTLD_LAZY);
if(handle==NULL)
{
cout