想在linux中写动态链接库,貌似在linux中叫共享库。。
共享库叫libmy.so
程序如下:
libmy.h
#ifndef LIBMY_H
#define LIBMY_H
#include "libmy_global.h"
class LIBMYSHARED_EXPORT Libmy {
public:
Libmy();
virtual void hello();
};
extern "C" Libmy* instanceOf();
#endif // LIBMY_H
libmy.cpp
#include "libmy.h"
#include <stdio.h>
Libmy::Libmy()
{
}
void Libmy::hello()
{
printf("hello mylib!\n");
}
Libmy* instanceOf()
{
return new Libmy();
}
调用共享库的程序如下:
#include <iostream>
#include <QLibrary>
#include "/home/hrl/Documents/libmy/libmy.h"
typedef Libmy* (*Instanceof)();
int main(int argc, char *argv[])
{
QLibrary mylib("libmy");
if(mylib.load())
{
Instanceof instanceof = (Instanceof)mylib.resolve("instanceof");
if(instanceof)
{
Libmy *libmy = instanceof();
libmy->hello();
delete libmy;
}
}
else
std::cout << "DLL is not loaded!"<<std::endl;
return 0;
}
结果。。
既不输出 "DLL is not loaded!"
也不输出 "hello mylib!
肿么回事啊。。。。
------最佳解决方案--------------------
首先,你把libmy编译成库没有?
其次,要把编译出来的库文件copy到/usr/lib目录下,还要写libmy.pc文件并copy到/usr/lib/pkgconfig目录
------其他解决方案--------------------
没这么复杂!你先创建一个库项目,编译出一个.so的动态库文件。里边其实就是一个类。
然后你就写个demo来使用这个.so .先在你的.pro里边加上LIBS += -L/ThePathLibFileLocated -lYourLib
还有INCLUDEPATH+= LibHeaderFilePath 如果找不到你的so文件,偷懒的办法就是把你的so 文件copy到系统lib路径下。要么就设置环境变量LD_LIBRARY_PATH加上你的so文件所在路径。
------其他解决方案--------------------
libmy.h
#ifndef LIBMY_H
#define LIBMY_H
#include <QObject>
class MyLib : public QObject
{
public:
MyLib();
~MyLib();
void hello();
};
#endif /*LIBMY_H*/
libmy.cpp
#include "libmy.h"
#include <QtDebug>
MyLib::MyLib()
{
}
MyLib::~MyLib()
{
}
void MyLib::hello()
{
qDebug() << "hello world~!";
}
libmy.pro
######################################################################
# Automatically generated by qmake (2.01a) ?? 11? 7 17:17:14 2012
######################################################################