找回密码
 用户注册

QQ登录

只需一步,快速开始

查看: 6643|回复: 3

一套代码,同时在vc2005和gcc中使用的方法

[复制链接]
发表于 2008-9-5 16:20:28 | 显示全部楼层 |阅读模式
前几天把自己的gcc程序转到vc2005下编译,总结一下经验。
有几个需要考虑的问题
1,vc中要求所有cpp文件都必须#include "stdafx.h",且放在首行。当然可以disabled这个选项,但是为了编译速度,最好保留预编译头功能。
刚开始的想法是在cpp文件头部加入
#if defined (_MSC_VER)
#include "stdafx.h"
#endif
但很可惜不行,vc中会在#endif处报错。
2,vc中对dll的处理很特别,必需分别用__declspec(dllexport)和__declspec(dllimport)声明导出和导入的符号。

现在的想法是一套程序,可以不用修改在vc2005和gcc中都能顺利编译。具体做法是:
1,在需要生成dll的工程的stdafx.h中:
#if defined (_MSC_VER)

#define MY_LIB __declspec(dllexport)

// vc 的原有stdafx.h中的东西

#else

#define MY_LIB

#endif /* _MSC_VER */
2,在该工程的所有public class前加上MY_LIB声明,如
class MY_LIB A
{
    // .....
}
3,在需要用到上面dll的工程的stdafx.h中:
#if defined (_MSC_VER)

#define MY_LIB __declspec(dllimport)

// vc 的原有stdafx.h中的东西

#else

#define MY_LIB

#endif /* _MSC_VER */

[ 本帖最后由 wishel 于 2008-9-5 16:50 编辑 ]
 楼主| 发表于 2008-9-5 16:26:43 | 显示全部楼层
ACE程序员指南2.5.1介绍了用$ACE_ROOT/bin/generate_export_file.pl 来做类似的事情的方法,看起来比较累,功能也比较多。
上面这种方法比较简单易懂,功能上也基本够用了,可以作为另一种选择吧,呵呵。
发表于 2008-9-9 17:08:18 | 显示全部楼层
你这个也只是某些方面,还有其他情况呢。。。:lol
 楼主| 发表于 2008-9-9 20:51:29 | 显示全部楼层
慢慢来撒,我也是刚开始学用vc,遇到新情况就再总结增加吧
您需要登录后才可以回帖 登录 | 用户注册

本版积分规则

Archiver|手机版|小黑屋|ACE Developer ( 京ICP备06055248号 )

GMT+8, 2024-11-22 01:23 , Processed in 0.020861 second(s), 5 queries , Redis On.

Powered by Discuz! X3.5

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表