Chinaunix首页 | 论坛 | 博客
  • 博客访问: 195349
  • 博文数量: 19
  • 博客积分: 1422
  • 博客等级: 上尉
  • 技术积分: 235
  • 用 户 组: 普通用户
  • 注册时间: 2007-11-04 17:46
文章分类

全部博文(19)

文章存档

2011年(1)

2009年(2)

2008年(9)

2007年(7)

我的朋友

分类: C/C++

2008-01-06 22:20:40

一、首先来编译VCF自带的例子Helloworld2(使用静态库)
cd c:\vcf-0.9.0\examples\helloworld2
mingw32-make -f makefile.gcc OPTION_DEBUG=0 OPTION_SHARED=0
然后提示错误如下:
..\..\lib/libApplicationKit_s.a(ApplicationKit_lib_DefaultTableCellItem.o):Defau
ltTableCellItem.cpp:(.text$_ZNSt8_Rb_treeIN3VCF13UnicodeStringESt4pairIKS1_NS0_4
FontEESt10_Select1stIS5_ESt4lessIS1_ESaIS5_EE9_M_insertEPSt18_Rb_tree_node_baseS
D_RKS5_[std::_Rb_treeF::Font>, std::_Select1st >, std:
:less, std::allocatorF::Font> > >::_M_insert(std::_Rb_tree_node_base*, std::_Rb_tree_node_base*, std:
:pair const&)]+0xb5): undefined reference t
o `VCF::Font::Font(VCF::Font const&)'
collect2: ld returned 1 exit status
mingw32-make: *** [.\HelloWorld2_s.exe] Error 1
打开helloworld2\makefile.gcc文件
修改115行
 $(CXX) -o $@ $(HELLOWORLD2_OBJECTS) $(LDFLAGS) $(__DEBUG_INFO) -mthreads -Wl,--enable-runtime-pseudo-reloc -L..\..\lib -Wl,--subsystem,windows -mwindows  -lrpcrt4 -lodbc32 -lodbccp32 -lversion -lkernel32 -luser32 -lgdi32 -lwinspool -lcomdlg32 -ladvapi32 -lshell32 -lole32 -loleaut32 -luuid -lodbc32 -lodbccp32 -lcomctl32 -lws2_32 -lopengl32 -lglu32 $(____HelloWorld2_FOUNDATIONKIT_p) -l$(LIBAGG_FILENAME) -l$(ZLIB_FILENAME) -l$(LIBJPEG_FILENAME) -l$(LIBPNG_FILENAME) $(____HelloWorld2_GRAPHICSKIT_p) $(____HelloWorld2_APPLICATIONKIT_p)
为:
 $(CXX) -o $@ $(HELLOWORLD2_OBJECTS) $(LDFLAGS) $(__DEBUG_INFO) -mthreads -Wl,--enable-runtime-pseudo-reloc -L..\..\lib -Wl,--subsystem,windows -mwindows $(____HelloWorld2_APPLICATIONKIT_p) $(____HelloWorld2_GRAPHICSKIT_p) $(____HelloWorld2_FOUNDATIONKIT_p)
 -lrpcrt4 -lodbc32 -lodbccp32 -lversion -lkernel32 -luser32 -lgdi32 -lwinspool -lcomdlg32 -ladvapi32 -lshell32 -lole32 -loleaut32 -luuid -lodbc32 -lodbccp32 -lcomctl32 -lws2_32 -lopengl32 -lglu32  -l$(LIBAGG_FILENAME) -l$(ZLIB_FILENAME) -l$(LIBJPEG_FILENAME) -l$(LIBPNG_FILENAME)
注意不要换行,再编译,出现以下错误:
..\..\lib/libApplicationKit_s.a(ApplicationKit_lib_Win32Edit.o):Win32Edit.cpp:(.
text$_ZN3VCF24Win32RichEditOleCallback14QueryInterfaceERK5_GUIDPPv+0x27): undefi
ned reference to `IID_IRichEditOleCallback'
IID_IRichEditOleCallback是在richole.h头文件中定义的,但gcc好像没有将他链接到库中,所以我要自己来做
新建一个richole.cpp文件,内容如下:
#include
#include
#include
const GUID IID_IRichEditOle={};
const GUID IID_IRichEditOleCallback={};
然后编译他
g++ -o richole.o -c richole.cpp
ar r librichole.a richole.o
将librichole.a复制到c:\vcf-0.9.0\lib目录下
再修改makefile.gcc,在刚才那行尾添加-lrichole,再编译OK。
运行HelloWorld2_s.exe,看看效果吧(他需要mingwm10.dll运行时库,如果要编译脱离该库的程序,只需去掉-mthreads选项)
 
二、下面我们来自己手动编译
示例程序Helloworld.cpp:

#include "vcf/ApplicationKit/ApplicationKit.h"
using namespace VCF;
class HelloWorldApp : public Application {
public:
 HelloWorldApp( int argc, char** argv ): Application(argc, argv) {
 }
 virtual bool initRunningApplication() {
  Application::initRunningApplication();
  Window* mainWindow = new Window();
  setMainWindow( mainWindow );
  mainWindow->setCaption( "Hello World" );
  mainWindow->show();
  return true;
 }
};
int main(int argc, char *argv[])
{
 Application* app = new HelloWorldApp( argc, argv );
 Application::main();
 return 0;
}

然后运行:

g++ -o helloworld.o -c -D_WIN32 -DWIN32 -D_WINDOWS -DVCF_MINGW HelloWorld.cpp

g++ -o helloworld.exe -Wl,--subsystem,windows -mwindows helloworld.o -lApplicationKit_s -lGraphicsKit_s -lFoundationKit_s -lrpc
rt4 -lversion -llibagg_s  -lole32 -luuid -lcomctl32 -loleaut32 -lrichole

-DVCF_MINGW是必须的,不然会有很多的编译错误

这样编译会非常麻烦,如果将所有需要的库链接成一个库就方便多了,操作如下:

ar x libApplicationKit_s.a #将所有的目标文件扩展出来

ar r libFoundationKit_s.a *.o -lrichole -lrpcrt4 -lodbc32 -lodbccp32 -lversion -lkernel32 -luser32 -lgdi32 -lwinspool -lcomdlg32 -ladvapi32 -lshell32 -lole32 -loleaut32 -luuid -lodbc32 -lodbccp32 -lcomctl32 -lws2_32 -lopengl32 -lglu32 -llibAGG_s -lZLib_s -lLibJPEG_s -lLibPNG_s

再链接程序就方便多了:

g++ -o helloworld.exe -Wl,--subsystem,windows -mwindows helloworld.o -lApplicationKit_s -lGraphicsKit_s  -lFoundationKit_s

 

 

 

阅读(2477) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~