我有一堆在32位环境中使用的C程序,现在我需要在64位环境中对其进行编译。
大家好,
我是COBOL开发人员。
在我所在的公司,我们正在将Linux操作系统从32位迁移到64位版本。
除了C程序,我们几乎做了所有事情。
在我们的makefile文件中,基本上我们有“ gcc -c”,我添加了-m64。
某些程序可以很好地编译,而其他程序则不能。
当我们的cobol程序调用这些c子例程时,我们会收到“分段错误(内核已转储)”错误消息。
当我在32位env上编译C程序时,没有任何警告消息,但是在64位env上有警告。
/* mgetdat.c */
#include <stdio.h>
#include <string.h>
#include <unistd.h>
#include <time.h>
int mfqend ()
{
char *Jobname;
char *Jobno;
char str[200];
Jobname = (char*)getenv("JOBNAME");
if(Jobname == NULL)
Jobname = "JobUnknown";
Jobno = (char*)getenv("JOBNO");
if(Jobno == NULL)
Jobno = "JobnoUnknown";
sprintf(str,"/tmp/%s.%s",Jobname,Jobno);
unlink(str);
return 0;
}
这是我收到的以下警告:
/exp/prod/src>make mfqend
cc -c -m64 mfqend.c 2>&1 | tee mfqend.err
mfqend.c: In function âmfqendâ:
mfqend.c:12:12: warning: cast to pointer from integer of different size [-Wint-to-pointer-cast]
Jobname = (char*)getenv("JOBNAME");
^
mfqend.c:15:10: warning: cast to pointer from integer of different size [-Wint-to-pointer-cast]
Jobno = (char*)getenv("JOBNO");
^
cp -f mfqend.o mfqend.o2
ar ru /public/prod/lib/libpubbatsub.a mfqend.o mfqend.err
rm -f mfqend.o mfqend.o2 mfqend.err
由于我对C语言的了解不多,因此我的想法用光了。
如果有人对可以做什么有任何想法,我将不胜感激...