linux 怎样可以把c++类封装成dll

Sander 2009-07-16 04:55:36
linux 怎样可以把c++类封装成dll
...全文
561 19 打赏 收藏 转发到动态 举报
写回复
用AI写文章
19 条回复
切换为时间正序
请发表友善的回复…
发表回复
Sander 2009-07-17
  • 打赏
  • 举报
回复
To:yhf365

EvtSock.cpp :public MySocket.cpp

这个怎样编译成.so
请告知
fleiou2008 2009-07-17
  • 打赏
  • 举报
回复
DLL是windows 下的动态连接库,在linux下就是另外的.so了
Sander 2009-07-17
  • 打赏
  • 举报
回复
我要编译成.so c++类
Sander 2009-07-17
  • 打赏
  • 举报
回复
jrtplib-3.7.1 不是c++生成的lib吗
steptodream 2009-07-17
  • 打赏
  • 举报
回复
二楼已经说了
Sander 2009-07-17
  • 打赏
  • 举报
回复
没有c++ 格式 的so的,编译成c语言格式的so,封装成c++ 来调用。
到底有没有c++的so呀
Sander 2009-07-17
  • 打赏
  • 举报
回复
谢谢,我已经做出来了
yhf365 2009-07-17
  • 打赏
  • 举报
回复
[Quote=引用 17 楼 Sander 的回复:]
EvtSock.cpp :public MySocket.cpp

这个怎样编译成.so
请告知
[/Quote]
g++ EvtSock.cpp -c -o EvtSock.o
g++ -shared -Wl -soname -o LibEvtSock.so EvtSock.o
你可以试一下
应该会生成LibEvtSock.so
once_and_again 2009-07-16
  • 打赏
  • 举报
回复

没有c++ 格式 的so的,编译成c语言格式的so,封装成c++ 来调用。
fairchild811 2009-07-16
  • 打赏
  • 举报
回复
在Linux下用g++编译好之后,可以拿到windows下,
可以用g++ for windows编译。

up
lambert_s 2009-07-16
  • 打赏
  • 举报
回复
可以用:gcc -shared
具体例子Google一下,有很多。。。
rabbii 2009-07-16
  • 打赏
  • 举报
回复
mark~~~
  • 打赏
  • 举报
回复
楼主linux下封成so文件即可啊。

http://dev.csdn.net/article/84/84562.shtm
yhf365 2009-07-16
  • 打赏
  • 举报
回复
在Linux下用g++编译好之后,可以拿到windows下,
可以用g++ for windows编译。
Dev C++就可以,它默认使用g++编译的。
原理都是一样的.

也可以用VC编译,但可能在兼容性上会出问题。

Dev C++生成DLL:
http://www.zaoxue.com/article/tech-39019.htm


Sander 2009-07-16
  • 打赏
  • 举报
回复
哦,其实我这个类包括windows 和linux都可以用的一个queue的管理类, 楼上的兄弟可以详细说说怎样在window下编译成dll, 两边都可以用呢,
给个网路资料连接也可以
cybertitan 2009-07-16
  • 打赏
  • 举报
回复
其实,要封装成windows dll也是可以的,用VC编译就可以了,现在,好多开源软件都支持两种不同的编译windows Linux都支持
封装成.so就更简单了,稍微看一下gcc的用法的就可以了,2楼的兄弟已经说了
Sander 2009-07-16
  • 打赏
  • 举报
回复
恩,我是封装成.so,
struct DATA_LIST
{
bool bIsUse;
int nDataLen;
unsigned char* pbyData;
};

//--------------------------------------------------------------------------------------------
class CMQMgr
{
public:
//nProcMethod = 0;
CMQMgr(int nMsgLen, int nMaxQueueNum, int nProcMethod=0);
~CMQMgr();

void Push(unsigned char* byRecData, int nDataLen);
void InsertHead(unsigned char* byRecData, int nDataLen);
int Pop(unsigned char* byProcData);

int GetQueueCount();
void SetMaxCount(int nMax = -1, bool bDrop = false);
int GetMaxCount();
void SetNotifyEvt(pthread_cond_t* hNotifyEvent){m_hNotifyEvt = hNotifyEvent;}

protected:
int GetFreeBuf();

private:
pthread_mutex_t m_data_mutex;
pthread_mutex_t m_pop_mutex;
pthread_cond_t m_pop_cond;
pthread_mutex_t m_push_mutex;
pthread_cond_t m_push_cond;

pthread_cond_t* m_hNotifyEvt;

timespec m_timeout;
vector<int> m_IntVector;

int m_nMax;
int m_nMsgMaxLen;
bool m_bDrop;

DATA_LIST* m_pDataList;
int m_nMsgLen;

int m_nProcMethod;


};
这个是头文件


yhf365 2009-07-16
  • 打赏
  • 举报
回复
dll?这是Win下的格式啊,
你是想封装成.so文件吧,是静态库,肯定可以的。

如果你有两个类,放在这几个文件中:
test.h test.cpp test1.h test2.cpp
在用g++编译时,先编译成.o文件,在编译成静态库:
g++ test.cpp -c -o test.o
g++ test1.cpp -c -o test1.o

g++ -shared -Wl -soname -o libtest.so.1.0.0 test.o test1.o
你的类就在libtest.so.1.0.0里面
ShowMan 2009-07-16
  • 打赏
  • 举报
回复
无法, linux下的动态库是so。

gcc -shared 就可以。

 1.对Linux操作,一般都推荐在普通用户模式下,如果需要超级用户的权限,则可以通过su root,输入root用户密码切换。我是个人学习使用,同时又有很多的操作都要使用root用户,因此就直接在root用户下进行编译。

  2.编译生成动态库的命令为:gcc (-fpic) -shared -o libmyfunction.so myfunction.c

  -fpic 使输出的对象模块是按照可重定位地址方式生成的。

  -shared指定把对应的源文件生成对应的动态链接库文件。

23,131

社区成员

发帖
与我相关
我的任务
社区描述
Linux/Unix社区 应用程序开发区
社区管理员
  • 应用程序开发区社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧