请问如何在CYGWIN下面用G++(非GCC)编译生成*.dll文件,

六六哥 2010-02-22 06:26:12

请问如何在CYGWIN下面用G++(非GCC)编译生成*.dll文件,
有3个文件 A.cc B.cc, 然后C.cc中的函数调用A.cc 和B.cc 中的函数,且C.cc不包含main函数,我的目标是生成一个libC.dll的动态链接文件:
我写的Makefile如下


COMPILE = libtool --mode=compile
LINK = libtool -shared --mode=link
INSTALL = libtool --mode=install install -c

DIR = /cygdrive/d/workspace/IDEs/CPP/DN_Mediation/UMTS_FM_SEPE_COMMON_CORE/impl/FMK_WOM_dnMediationServer

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

OBJS = ExceptionRepository.o \
A.o \
B.o

LIBS =

TARGET =

all: clean \
A.o \
B.o \
C

A.o :
$(COMPILE) $(CXX) -g -O2 -c A.cc
B.o:
$(COMPILE) $(CXX) -g -O2 -c B.cc
C: A.o B.o
$(LINK) $(CXX) -shared -o C.dll A.o B.o -L/usr/local/lib -lpthread -Wl,--enable-auto-import

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

install: all
$(INSTALL) A.o $(DIR)/objs/A.o
$(INSTALL) B.o $(DIR)/objs/B.o

clean:
-/bin/rm -rf -v $(OBJS) $(TARGET)
-/bin/rm -rf -v ../objs/*


但是编译后总是报告如下错误:



/usr/lib/libcygwin.a(libcmain.o):(.text+0xab): undefined reference to `_WinMain@16'
collect2: ld returned 1 exit status


请教各位达人,我改怎么办?我不希望有main函数啊,我的dll里怎么可能有main函数呢?求各位达人多多帮忙,小弟谢过啦


求教,求教 OTZ OTZ OTZ OTZ OTZ OTZ

...全文
245 7 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
7 条回复
切换为时间正序
请发表友善的回复…
发表回复
六六哥 2010-02-23
  • 打赏
  • 举报
回复
引用 3 楼 truewq 的回复:
高手指点给我的,请参考,希望有用:http://www.cnblogs.com/cy163/archive/2009/03/12/1409434.html


谢谢,很好的link,虽然没有解决我的问题,但是好贴子啊,收藏了 :)
六六哥 2010-02-23
  • 打赏
  • 举报
回复
引用 4 楼 ostrichmyself 的回复:
gcc -mno-cygwin -Wl,--add-stdcall-alias -shared -o xxx.dll xxx.c 

试试看是否可行


谢谢,但是我的问题是:我用了libtool,已经生成出来了libtool的库文件*.o; *.lo和*.la,和使用g++的编译方式一摸一样; 使用libtool是为了解决引用xerces的win32库文件的问题;不知大是不是这些有影响?
如果换成生成*.la的静态库文件(通过*.lo来编译)就没有任何问题,一旦换成了生成动态库的时候有问题,就出现问题了

而且我试用了您给出的方法,发现还是报出同样的错误(没有@WinMain)

达人们啊,小弟求教
六六哥 2010-02-23
  • 打赏
  • 举报
回复
引用 1 楼 steptodream 的回复:
编译c文件的时候加-c参数就不会出现undefined reference to `main'的情况了吧
下面的代码
gcc -o test test.c 编译会出上面说的错误
gcc -o test -c test.c 则正常编译
不知道对你有没有帮助
C/C++ code
#include<stdio.h>int test()
{
printf("Hello, world!\n");return0;
}


谢谢,但是我的问题是:我用的是CPP而不是纯C,
x-teamer团队 2010-02-22
  • 打赏
  • 举报
回复
gcc -mno-cygwin -Wl,--add-stdcall-alias -shared -o xxx.dll xxx.c

试试看是否可行
酷比程序 2010-02-22
  • 打赏
  • 举报
回复
高手指点给我的,请参考,希望有用:http://www.cnblogs.com/cy163/archive/2009/03/12/1409434.html
zjf30366 2010-02-22
  • 打赏
  • 举报
回复
$(LINK) $(CXX) -shared -o C.dll A.o B.o -L/usr/local/lib -lpthread -Wl,--enable-auto-import

去掉-o试试
steptodream 2010-02-22
  • 打赏
  • 举报
回复
编译c文件的时候加-c参数就不会出现undefined reference to `main'的情况了吧
下面的代码
gcc -o test test.c 编译会出上面说的错误
gcc -o test -c test.c 则正常编译
不知道对你有没有帮助

#include <stdio.h>
int test()
{
printf("Hello, world!\n");
return 0;
}

23,215

社区成员

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

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