• 6187阅读
  • 4回复

[提问]如何在linux下编写并使用共享库? [复制链接]

上一主题 下一主题
离线兔纸
 
只看楼主 倒序阅读 楼主  发表于: 2012-11-07
共享库叫 libmy.so
程序如下:
libmy.h
  1. #ifndef LIBMY_H
  2. #define LIBMY_H
  3. #include "libmy_global.h"
  4. class LIBMYSHARED_EXPORT Libmy {
  5. public:
  6.     Libmy();
  7.     virtual void hello();
  8. };
  9. extern "C" Libmy* instanceOf();
  10. #endif // LIBMY_H
libmy.cpp
  1. #include "libmy.h"
  2. #include <stdio.h>
  3. Libmy::Libmy()
  4. {
  5. }
  6. void Libmy::hello()
  7. {
  8.     printf("hello mylib!\n");
  9. }
  10. Libmy* instanceOf()
  11. {
  12.     return new Libmy();
  13. }

调用共享库的程序啊如下:
  1. #include <iostream>
  2. #include <QLibrary>
  3. #include "/home/hrl/Documents/libmy/libmy.h"
  4. typedef Libmy* (*Instanceof)();
  5. int main(int argc, char *argv[])
  6. {
  7.     QLibrary mylib("libmy");
  8.     if(mylib.load())
  9.     {
  10.         Instanceof instanceof = (Instanceof)mylib.resolve("instanceof");
  11.         if(instanceof)
  12.         {
  13.             Libmy *libmy = instanceof();
  14.             libmy->hello();
  15.             delete libmy;
  16.         }
  17.     }
  18.     else
  19.         std::cout << "DLL is not loaded!"<<std::endl;
  20.     return 0;
  21. }

运行以后。既不输出DLL is not loaded!
也不输出"hello mylib!\n"

第一次写共享库 很多方面不太清楚 求指教!!
离线XChinux

只看该作者 1楼 发表于: 2012-11-07
Linux下写共享库,你什么也不用想,就按普通的C++类或函数来写头文件和cpp文件即可。
二笔 openSUSE Vim N9 BB10 XChinux@163.com 网易博客 腾讯微博
承接C++/Qt、Qt UI界面、PHP及预算报销系统开发业务
离线hohos

只看该作者 2楼 发表于: 2012-11-07
LIBS += -lGraphicsMagick++ -lGraphicsMagick -ljbig -llcms -ltiff -lfreetype -ljasper -ljpeg -lpng12 -lwmflite -lXext -lSM -lICE -lX11 -llzma -lbz2 -lxml2 -lz -lm -lgomp -lpthread -lltdl

在.pro文件中加入以上类似内容
你的应该是加-lmy
如果库不在系统libpath的话,试试加上 -L/usr/lib/yourLIBPATH

离线兔纸
只看该作者 3楼 发表于: 2012-11-07
回 1楼(XChinux) 的帖子

咦?那要怎么调用呢?。。谢谢您!
离线XChinux

只看该作者 4楼 发表于: 2012-11-08
如二楼所说
二笔 openSUSE Vim N9 BB10 XChinux@163.com 网易博客 腾讯微博
承接C++/Qt、Qt UI界面、PHP及预算报销系统开发业务
快速回复
限100 字节
 
上一个 下一个