原工程在VS2005下创建,后迁移到Eclipse CDT 3.3.2 + MingGW下,并增加makefile文件。

原VS2005下工程Sample,实现了对类SampleClass封装,生成Sample.dll文件。工程源码文件包括stdafx.h, stdafx.cpp, targetver.h, dllmain.cpp, Sample.def, Sample.h, Sample.cpp, SampleClass.h, SampleClass.cpp。其中stdafx.h, stdafx.cpp, targetver.h用来建立预编译头文件SampleClass.pch和预编译类型文件StdAfx.obj;dllmain.cpp, Sample.def为加载DLL入口函数文件和模块定义文件;SampleClass.h, SampleClass.cpp对类SampleClass进行了声明和定义;Sample.h, Sample.cpp则定义DLL应用程序的导出函数。

首先在Eclipse下创建工程Sample,然后利用import功能,将VS2005下原工程的*.h, *.cpp, *.def, *.txt文件导入到Sample工程中。具体操作可参考IBM Developworks的《将Visual Studio C和C++ 项目迁移到 Eclipse CDT》(http://www.ibm.com/developerworks/cn/opensource/os-ecl-vscdt/)。另需要注意到是,该链接文章中使用IDE为VC6可导出并修改makefile,而VS2005已经不提供导出makefile文件功能。

接下来,编写了makefile文件(因DLL调用编译问题,需自己添加g++ 命令)。其中实现了多文件(Sample.cpp和SampleClass.cpp)的编译链接,解决方法有两个:其一是在Sample.cpp中include “SampleClass.cpp”,作为一个文件编译;其二是在makefile中添加g++参数先分别编译两个cpp文件,再链接生成DLL。本文用到的是第二种方法。

用到的g++参数说明如下(注意g++前均为tab键非空格):

-shared参数用来创建共享库,在windows中为dll。其中要注意”-o Sample.dll Sample.o SampleClass.o”中两个.o文件都必须包含,否则报错undefined reference to `SampleClass::CheckLicense(char const*)'等;
-Wl,--out-implib 这个参数主要是生成.a这个文件;-Wl等待下一条信息进行连接,--out-implib是给连接程序ld使用的,用于创建要连接dll需要的import library;
-DFILTERPLUGIN_EXPORTS来设置宏FILTERPLUGIN_EXPORTS。编译时将手动设置FILTERPLUGIN_EXPORTS宏,这时候宏FILTERPLUGIN_API被设置成__declspec(dllexport)。这样GCC就能编译这个DLL。当从可执行文件中调用DLL时,FILTERPLUGIN_EXPORTS宏没有被设置,FILTERPLUGIN_API宏被设置成__declspec(dllimport), 它将使函数在调用范围内可见。__declspec(dllexport)和__declspec(dllimport)是用来创建DLL的宏。

如需创建exe可执行程序,需增加
Sample.exe: Sample.o Sample.dll
    g++ -o Sample.exe Sample.o -L./ -lmessage
其中-L 指定连接库路径,-lmessage (or -l message) 指定DLL的import library。
具体信息可参见Minimalist GNU for Windows的A sample DLL (http://www.mingw.org/MinGWiki/index.php/sample%20DLL?PHPSESSID=abce11154a632520eb),以及GNU make手册。

-----------------

makefile文件如下:

CXXFLAGS =    -O2 -g -Wall -fmessage-length=0

OBJS =        Sample.o SampleClass.o dllmain.o stdafx.o

LIBS =

TARGET =    Sample.dll

$(TARGET):    $(OBJS)
    $(CXX) -o $(TARGET) $(OBJS) $(LIBS)

all:    $(TARGET)

# rm for LINUX/UNIX, while del for DOS
clean:
    rm -f $(OBJS) $(TARGET)
    del *.o
    del Sample.dll

Sample.dll: Sample.o SampleClass.o
    g++ -shared -o Sample.dll Sample.o SampleClass.o -Wl,--out-implib,libmessage.a

Sample.o: Sample.cpp Sample.h SampleClass.h
    g++ -c -DFILTERPLUGIN_EXPORTS Sample.cpp   
   
SampleClass.o: SampleClass.cpp SampleClass.h
    g++ -c SampleClass.cpp

dllmain.o: dllmain.cpp Sample.h
    g++ -c dllmain.cpp

stdafx.o: stdafx.cpp stdafx.h targetver.h
    g++ -c stdafx.cpp

VS2005工程迁移到Eclipse CDT的更多相关文章

  1. 利用Eclipse CDT 阅读C/C++代码

    本文转自: https://xbgd.iteye.com/blog/1259544 常见阅读代码的工具有 , visual c++, visual studio + va(visual assista ...

  2. Eclipse+CDT+GDB调试android NDK程序(转)

    Eclipse+CDT+gdb调试android ndk程序 先介绍一下开发环境,在这个环境下,up主保证是没有问题的. ubuntu 11.10 eclipse 3.7(indego) for ja ...

  3. Eclipse进行C/C++开发——Eclipse+CDT+MinGW的配置与使用详解

    http://hi.baidu.com/ltb6w/item/3a51f11926fda60ce75c361d Eclipse进行C/C++开发——Eclipse+CDT+MinGW的配置与使用详解 ...

  4. eclipse+cdt+minGW (C/C++ 编译)

    1. 安装Eclipse CDT 方法1: 已安装Eclipse的话,可以通过菜单Help->Install New Software,安装CDT插件. 点击ADD后 Name:CDT    L ...

  5. VS2005工程由Pocket PC 2003 SDK转为WINCE6.0 SDK的问题

    把VS2005工程有采用的Pocket PC 2003 SDK改为WINCE6.0 SDK,具体操作见链接 http://blog.csdn.net/loongembedded/article/det ...

  6. eclipse中配置c++开发环境 Eclipse + CDT + MinGW

    转自eclipse中配置c++开发环境 Eclipse + CDT + MinGW 基本框架:Eclipse + CDT + MinGW 背景知识: CDT:CDT 是完全用 Java 实现的开放源码 ...

  7. Eclipse + CDT + YAGARTO + J-Link,STM32开源开发环境搭建与调试

    Eclipse+CDT+YAGARTO+J-Li:开源开发环境搭建与调试:作者:Chongqing:邮箱:ycq.no1@163.com:文档版本:V1.0:发布日期:2014-08-04:前言:此文 ...

  8. 如何在Eclipse CDT中编译含有多个main函数的项目

    最近在杭电ACM上做题,使用的C++工具是Eclipse,但是Eclipse CDT不能同时存在多个main函数的文件,上网也搜了很多资料,但是按他们的步骤来,还是不能实现自己想要的效果.经过一下午的 ...

  9. 转: 使用MinGW + Eclipse CDT进行C++开发的配置方法

    使用MinGW + Eclipse CDT进行C++开发的配置方法 1 2 3 4 5 6 分步阅读 Eclipse作为开源的IDE,可以用来高效开发Java.C++.C等程序.本文介绍如何在Wind ...

随机推荐

  1. 【 D3.js 高级系列 — 5.0 】 颜色

    颜色是作图不可少的概念,常用的标准有 RGB 和 HSL,D3 提供了创建颜色对象的方法,能够相互转换和插值. RGB色彩模式是通过对红(Red).绿(Green).蓝(Blue)三个颜色通道相互叠加 ...

  2. JVM问题定位工具

    JDB JDB是基于文本和命令行的调试工具,Jikes在JDB的基础上提供了GUI.熟悉JDB还是有价值的,很多情况下需要我们在命令行下完成简单的debug问题定位. 1 2 3 jdb -class ...

  3. php网页显示正方形图片缩略图

    需求是这样的:原始图片的大小是不定的,类似800*600.1000*756,现有一个页面要以正方形(60*60)显示这些图片,注意:图片只能在内存处理,不能缩小后保存到本地磁盘. 解决办法: html ...

  4. java的四舍五入算法

    粗力度的四舍五入为整数 package math; public class MathRoundTest { /** * Math类中提供了三个与取整有关的方法:ceil,floor,round, * ...

  5. a标签中的label在IE下触发不了a标签的href链接(label标签——解析)

    <a href="http://www.baidu.com/" target="_blank"> <span>百度</span&g ...

  6. 选择select框跳出信息

    <html > <body > <select type="select" name=s1 onChange=alert("你选择了&quo ...

  7. Sql2005 全文索引详解

    1.前言 14.1  全文索引的介绍 14.2  全文索引中常用的术语 14.3  全文索引的体系结构 14.4  全文目录管理 14.4.1  创建全文目录 14.4.2  查看与修改全文目录 14 ...

  8. 《深入Java虚拟机学习笔记》- 第3章 安全

    3.1为什么需要安全性 Java的安全模型是其多个重要结构特点之一,它使Java成为适于网络环境的技术.因为网络提供了一条攻击连人的计算机的潜在途径,因此安全性是非常重要的.Java安全模型侧重于保护 ...

  9. HDU 5965 Gym Class 贪心+toposort

    分析:就是给一些拓补关系,然后求最大分数,所以贪心,大的越靠前越好,小的越靠后越好 剩下的就是toposort,当然由于贪心,所以使用优先队列 #include <iostream> #i ...

  10. selenium Grid

    Selenium Grid 的机制是启动一个 hub,然后启动多个 Selenium RC 注册到 hub 上, 当测试请求到 hub 时,hub 会将测试分发给 Selenium RC, Selen ...