免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 3078 | 回复: 5
打印 上一主题 下一主题

[C++] make出来的二进制文件变成了静态库文件 [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2008-11-17 15:46 |只看该作者 |倒序浏览
TUXINCLUDE = $(TUXDIR)/include
TUXLIB = $(TUXDIR)/lib
OBJS=app_main.o prog_para.o socket.o sock_queue.o msg_recv.o database.o log_file.o common.o tux_call.o sms_send.o ltxs.o gzykt_send.o
TARGET=uni_client
all:$(TARGET)
$(TARGET):$(OBJS)
    aCC -DHPUX +DD64  -b -o $@ $(OBJS) -lpthread -L/$(ZLIBDIR)/lib -L$(TUXDIR)/lib -L$(ORACLE_HOME)/lib   
.SUFFIXES:.o .h    
.SUFFIXES:.cpp .o
.cpp.o:
&nbsp;&nbsp;&nbsp;&nbsp;aCC +DD64 -c -I$(TUXDIR)/include -I$(ORACLE_HOME)/rdbms/public -I$(ORACLE_HOME)/rdbms/demo -o $@ $<
clean:
&nbsp;&nbsp;&nbsp;&nbsp;rm $(TARGET) *.o

install:
&nbsp;&nbsp;&nbsp;&nbsp;cp $(TARGET) /Client_Release/ClientOne/$(TARGET)One
&nbsp;&nbsp;&nbsp;&nbsp;cp $(TARGET) /Client_Release/ClientTwo/$(TARGET)Two
&nbsp;&nbsp;&nbsp;&nbsp;cp $(TARGET) /Client_Release/ClientThree/$(TARGET)Three



makefile中的内容如上,执行make all没有报错,环境是HP-UX,结果编出来的程序无法执行,说是没有权限,我将程序文件的权限改成777也不行,后来用file查看了一下,编出来的程序文件类型竟然是 ELF-64 shared object file - IA64,正常的可执行文件应该是 ELF-64 executable object file - IA64,我仔细对比了之前一个makefile中的参数,最后精简到现在这个样子,请大家帮忙看看是怎么回事儿,我实在是找不出什么毛病了。

论坛徽章:
1
荣誉版主
日期:2011-11-23 16:44:17
2 [报告]
发表于 2008-11-17 16:30 |只看该作者
make时不是都有每步的命令输出吗?
最后的那个链接成可执行文件的命令是啥?

论坛徽章:
0
3 [报告]
发表于 2008-11-17 16:48 |只看该作者
aCC -DHPUX +DD64  -b -o $@ $(OBJS) -lpthread -L/$(ZLIBDIR)/lib -L$(TUXDIR)/lib -L$(ORACLE_HOME)/lib   

就是这个拉,当然,$@被体换成uni_client,$(OBJS) 被替换成一堆*.o,我将屏幕上输出的命令执行过,但是还是不行

论坛徽章:
1
荣誉版主
日期:2011-11-23 16:44:17
4 [报告]
发表于 2008-11-17 17:42 |只看该作者
从上面看,值得怀疑的只有-b选项,
我不知道它是什么意思,你把它去掉编译。
遇到问题,要有思路怎么一步一步去解决。

论坛徽章:
0
5 [报告]
发表于 2008-11-17 23:09 |只看该作者

回复 #3 封神 的帖子

make完毕后,去掉最终生成的可执行文件,再make。
此时屏幕输出最后一行生成文件的命令了,把该命令反复的试,反复的改,想要静态就静态想要动态就动态(当然,库足够)。

另:你说的那个出来的文件应该不能叫静态的呢,静态动态的概念我的理解是:

连接了若干 *.so的动态库的可执行文件叫动态连接的,一般是这种。
连接了若干 *.a的静态苦的可执行文件的,叫静态连接的,此种方式产生的文件,受二进制运行环境影响很小,但是体积大。

论坛徽章:
0
6 [报告]
发表于 2008-11-18 11:14 |只看该作者
原帖由 lenovo 于 2008-11-17 17:42 发表
从上面看,值得怀疑的只有-b选项,
我不知道它是什么意思,你把它去掉编译。
遇到问题,要有思路怎么一步一步去解决。



罪魁祸首就是-b,因为是用别人那里之际拿过来的程序,而且去掉-b之后一直无法编译过去,所以一开始根本没想到是这个参数的问题,后来man cc查了一下,原来-b是编译静态库的参数,unix下的c编译器和gcc差很多,我记的gcc里面应该是share选项来的.........
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP