琵琶行论坛

 找回密码
 注册
每日签到论坛FTP使用教学领取红包(开放!)论坛FTP搜索引擎
查看: 3390|回复: 24

[讨论] 懂编译程序的高手们 请教个问题 我完全不会哈

[复制链接]

签到天数: 657 天

[LV.9]以坛为家II

发表于 2021-1-27 15:03:45 | 显示全部楼层 |阅读模式
我不懂编程和编译,完全是看程序发布者的教程,
好不容易在debian下成功编译了可以在掌机上运行的模拟器
其实挺简单就是 ①建环境然后②make (参数都设置好了 make即可成功)

现在我又找到了份 修正了一些bug的版本,但是是另外平台的,pc mac linux好像都可以的,我在mac上编译ok

我很菜不知道怎么修改文件让他可以和原先一样在debian下面为掌机编译成功,是不是把我原先版本里面的几个编译相关文件copy到修正版里面就可以了?毕竟参数都是ok的

请会编译的高手们帮我看看,我应该怎么弄啊...谢谢 应该copy哪几个文件 或者修改哪几个参数相关文件 我再试试


第一版 直接make就可以了 参数都是设置好了.7z (1.94 MB, 下载次数: 11)

签到天数: 3521 天

[LV.Master]伴坛终老

发表于 2021-1-27 19:12:27 | 显示全部楼层
你的掌机跑的是debian arm吗
我看两个版本都是有makefile的,你原先第一步配环境应该会指定arm linux的target,理论上同样步骤不需要改
回复 支持 1 反对 0

使用道具 举报

该用户从未签到

发表于 2021-1-27 18:52:29 | 显示全部楼层
一脸懵逼的进来,一脸懵逼的留个言,然后一脸懵逼的出去
回复 支持 反对

使用道具 举报

签到天数: 657 天

[LV.9]以坛为家II

 楼主| 发表于 2021-1-28 07:34:01 | 显示全部楼层
本帖最后由 yuic 于 2021-1-28 07:41 编辑
yangyangkingno1 发表于 2021-1-27 19:12
你的掌机跑的是debian arm吗
我看两个版本都是有makefile的,你原先第一步配环境应该会指定arm linux的targ ...

其实我是全不懂...只是因为有教程 并不停的baidu...

百度结果是 掌机只有32MB内存的arm9 移植的是linux 4.14的内核(linux4.14是没错的哈 这个掌机叫做miyoo或者pocketgo或者bittboy很多版本 横版竖版都有)
原先 我是安装的debian9,然后按照教程里面这样配置的 成功编译
$ export PATH=$PATH:/opt/miyoo/bin
$ export TARGETMACH=arm-linux
$ export BUILDMACH=i686-pc-linux-gnu
$ export CROSS=arm-linux
$ export CC=${CROSS}-gcc
$ export LD=${CROSS}-ld
$ export AS=${CROSS}-as
$ export CXX=${CROSS}-g++


由于不懂编程 完全搞不懂编译的具体步骤和参数
有的程序是什么什么./configure make make install
有的程序是什么什么autoreconf -iv;./configure --xxxxxxx;make;make install

这个原版很简单 我设置完以后就一个命令make就成功了....copy到掌机即可
这个改版
直接make是报错的 make: *** No targets specified and no makefile found. stop
要是直接运行./configure也是报错的 -bash:./configure:No such file or directory
然后我只能瞎蒙这个...
autoreconf -iv;.configure
然后报错了 如下图 肯定是参数什么的...问题 完全不会啊...
error.png

请问我应该运行什么命令来编译这个新版...

回复 支持 反对

使用道具 举报

签到天数: 657 天

[LV.9]以坛为家II

 楼主| 发表于 2021-1-28 07:37:05 | 显示全部楼层
394761797 发表于 2021-1-27 18:52
一脸懵逼的进来,一脸懵逼的留个言,然后一脸懵逼的出去

hehe 我也很懵逼 应为我不懂哈..提问感觉提的也有问题.....提不到点子上
回复 支持 反对

使用道具 举报

签到天数: 3521 天

[LV.Master]伴坛终老

发表于 2021-1-28 11:17:03 | 显示全部楼层
make找不到是因为没有生成的makefile,需要用automake生成,configure也是用autoconf生成
看你的输出target system type是x86 linux就不对了,所以没法cross compile
回复 支持 反对

使用道具 举报

签到天数: 657 天

[LV.9]以坛为家II

 楼主| 发表于 2021-1-28 12:16:00 | 显示全部楼层
yangyangkingno1 发表于 2021-1-28 11:17
make找不到是因为没有生成的makefile,需要用automake生成,configure也是用autoconf生成
看你的输出target ...

我也看到x86linux了 肯定是不对的
可是我还是和原先一样设置的
$ export PATH=$PATH:/opt/miyoo/bin
$ export TARGETMACH=arm-linux
$ export BUILDMACH=i686-pc-linux-gnu
$ export CROSS=arm-linux
$ export CC=${CROSS}-gcc
$ export LD=${CROSS}-ld
$ export AS=${CROSS}-as
$ export CXX=${CROSS}-g++
makefile,需要用automake生成,configure也是用autoconf生成
请问是执行什么样的命令啊...又或是很复杂....
回复 支持 反对

使用道具 举报

签到天数: 657 天

[LV.9]以坛为家II

 楼主| 发表于 2021-1-28 13:11:02 | 显示全部楼层
本帖最后由 yuic 于 2021-1-28 13:20 编辑
yangyangkingno1 发表于 2021-1-28 11:17
make找不到是因为没有生成的makefile,需要用automake生成,configure也是用autoconf生成
看你的输出target ...

我又测试了下 好像生成了可执行文件
就是我原先弄得用autoreconf -iv生成的可执行文件 原先替换运行不了
然后我刚才又用差不多的办法又生成了一个 上机测试 还是原样  但是!!!!!!

我发现进入游戏机的命令终端 手动敲字母...运行这个生成文件
gngeo -v是可以显示程序版本的,说明编译成功?了....至少能显示版本了不是....
但是 gngeo kof97就不行 提示 catch a sigsegv
我感觉我迈出了1小步.....
我搜索了下 是程序文件main.c定义了个报错....为什么我执行会导致这个结果....
static void catch_me(int signo) {
        printf("Catch a sigsegv\n");
        //SDL_Quit();
        exit(-1);
}


回复 支持 反对

使用道具 举报

签到天数: 3521 天

[LV.Master]伴坛终老

发表于 2021-1-28 15:10:24 | 显示全部楼层
sigsegv是段错误,一般是指针指向的内存不对,具体挂在哪里你需要用到调试器......
在终端里运行的时候除了catch a sigsegv还有别的输出吗,应该一开始就会输出rom名,没有调试器你可以试着在main一开始加一些printf来定位
回复 支持 反对

使用道具 举报

签到天数: 657 天

[LV.9]以坛为家II

 楼主| 发表于 2021-1-28 15:47:49 | 显示全部楼层
yangyangkingno1 发表于 2021-1-28 15:10
sigsegv是段错误,一般是指针指向的内存不对,具体挂在哪里你需要用到调试器......
在终端里运行的时候除了 ...

option rompath
c=105
flags rompath se on cmd line
c=66
flags biospath set on cmd line
catch a sigsegv

看起来貌似都是正常的输出显示吧 ..除了最后这个报错
out.JPG
让我改程序就没戏了...这个改版我在mac上也编译了 mac上运行的很好....

回复 支持 反对

使用道具 举报

签到天数: 3521 天

[LV.Master]伴坛终老

发表于 2021-1-28 16:34:38 | 显示全部楼层
可以看到命令行参数解析成功了,你可以在cf_parse_cmd_line下面每隔一两行加一个printf,很快就能定位到问题了
回复 支持 反对

使用道具 举报

签到天数: 657 天

[LV.9]以坛为家II

 楼主| 发表于 2021-1-28 17:15:21 | 显示全部楼层
yangyangkingno1 发表于 2021-1-28 16:34
可以看到命令行参数解析成功了,你可以在cf_parse_cmd_line下面每隔一两行加一个printf,很快就能定位到问 ...

    rom_name=cf_parse_cmd_line(argc,argv);

    /* print effect/blitter list if asked by user */
    if (!strcmp(CF_STR(cf_get_item_by_name("effect")),"help")) {
        print_effect_list();
    printf("111111111111111111111\n");
        exit(0);
    }
    if (!strcmp(CF_STR(cf_get_item_by_name("blitter")),"help")) {
        print_blitter_list();
    printf("222222222222222222222\n");
        exit(0);
    }

是这样吗....帮我改下这个文件上传论坛好不好~~....
我就添加了2行 结果还是显示一样的


回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

小黑屋|手机版|Archiver|琵琶行论坛 ( 赣ICP备12000882号 )

GMT+8, 2021-6-20 12:58 , Processed in 0.024460 second(s), 11 queries , Gzip On, MemCached On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

快速回复 返回顶部 返回列表