lc-soft / LC-Finder

An image annotation and object detection tool written in C
https://lcfinder.lc-soft.io
GNU General Public License v2.0
176 stars 37 forks source link

ubunut下用xmake 编译会出下这样错误 #56

Closed linuxsky closed 4 years ago

linuxsky commented 4 years ago

checking for the architecture ... x86_64 error: @programdir/core/base/scheduler.lua:343: attempt to yield across C-call boundary stack traceback: [C]: in function 'yield' [@programdir/core/base/scheduler.lua:343]: in function 'co_suspend' [@programdir/core/base/scheduler.lua:675]: in function 'poller_waitproc' [@programdir/core/base/process.lua:87]: in function 'wait' [@programdir/core/base/os.lua:736]: in function 'execv' [@programdir/core/base/os.lua:776]: in function 'iorun' [@programdir/core/base/filter.lua:63]: in function 'get' [@programdir/core/base/filter.lua:177]: [C]: in function 'gsub' [@programdir/core/base/filter.lua:171]: in function 'handle' [@programdir/core/base/interpreter.lua:453]: in function '_filter' [@programdir/core/base/interpreter.lua:488]: in function '_handle' [@programdir/core/base/interpreter.lua:521]: [C]: in function 'xpcall' [@programdir/core/base/interpreter.lua:735]: in function 'make' [@programdir/core/project/project.lua:442]: in function '_load_scope' [@programdir/core/project/project.lua:386]: in function '_load' [@programdir/core/project/project.lua:638]: in function '_load_options' [@programdir/core/project/project.lua:833]: in function 'options' [...dir/core/sandbox/modules/import/core/project/project.lua:54]: in function 'check' [@programdir/actions/config/main.lua:256]: [C]: in function 'load' [@programdir/core/base/task.lua:520]: in function 'run' [@programdir/core/sandbox/modules/import/core/base/task.lua:63]: in function 'run' [@programdir/actions/build/main.lua:99]: [C]: in function 'load' [@programdir/core/base/task.lua:520]: in function 'run' [@programdir/core/main.lua:259]: in function 'cotask' [@programdir/core/base/scheduler.lua:306]:

waruqi commented 4 years ago

这个问题是因为xmake 2.3.1重构coroutine调度后,默认main loop开启了coroutine scheduler,但是 xmake.lua 中 $(shell xxx) 的设置是在string.gsub的callback里面执行的os.run/yield

而lua51目前跨c执行coroutine.yield是不支持的,所以会有这个问题,我刚修复了,执行下xmake update dev更新到dev版本就可以了。。

也可以回退到2.2.9版本也是ok的。。

linuxsky commented 4 years ago

这个问题是因为xmake 2.3.1重构coroutine调度后,默认main loop开启了coroutine scheduler,但是 xmake.lua 中 $(shell xxx) 的设置是在string.gsub的callback里面执行的os.run/yield

而lua51目前跨c执行coroutine.yield是不支持的,所以会有这个问题,我刚修复了,执行下xmake update dev更新到dev版本就可以了。。

也可以回退到2.2.9版本也是ok的。。 是的退回去 目前没有报xmake 错误了,但是工程好像有问题,目前已经编译LCUI并且install

$ xmake build checking for the architecture ... x86_64 error: @programdir/core/base/filter.lua:68: run $(shell pkg-config .repos/LCUI/lcui.pc --static --libs-only-l) failed, errors: Failed to open '.repos/LCUI/lcui.pc': No sucy No package '.repos/LCUI/lcui.pc' found

stack traceback: [C]: in function 'error' [@programdir/core/base/os.lua:781]: in function 'raise' [@programdir/core/base/filter.lua:68]: in function 'get' [@programdir/core/base/filter.lua:180]: [C]: in function 'gsub' [@programdir/core/base/filter.lua:174]: in function 'handle' [@programdir/core/base/interpreter.lua:436]: in function '_filter' [@programdir/core/base/interpreter.lua:488]: in function '_handle' [@programdir/core/base/interpreter.lua:521]: [C]: in function 'xpcall' [@programdir/core/base/interpreter.lua:735]: in function 'make' [@programdir/core/project/project.lua:442]: in function '_load_scope' [@programdir/core/project/project.lua:386]: in function '_load' [@programdir/core/project/project.lua:638]: in function '_load_options' [@programdir/core/project/project.lua:833]: in function 'options' [...dir/core/sandbox/modules/import/core/project/project.lua:54]: in function 'check' [@programdir/actions/config/main.lua:256]: [C]: in function 'load' [@programdir/core/base/task.lua:520]: in function 'run' [@programdir/core/sandbox/modules/import/core/base/task.lua:63]: in function 'run' [@programdir/actions/build/main.lua:99]: [C]: in function 'load' [@programdir/core/base/task.lua:520]: in function 'run' [@programdir/core/main.lua:259]: in function 'cotask' [@programdir/core/base/scheduler.lua:315]:

waruqi commented 4 years ago

这个是xmake.lua里面的配置问题,执行失败了:pkg-config .repos/LCUI/lcui.pc --static --libs-only-l

linuxsky commented 4 years ago

这个是xmake.lua里面的配置问题,执行失败了:pkg-config .repos/LCUI/lcui.pc --static --libs-only-l

感谢!

lc-soft commented 4 years ago

等有空时我再更新一下脚本,然后把 Linux 端的构建过程放 CI 上跑。

linuxsky commented 4 years ago

等有空时我再更新一下脚本,然后把 Linux 端的构建过程放 CI 上跑。

恩好的 ,感觉linux 测试的比较少吧。目前除了LUCI我顺利编译通过之外其它的都有问题。 另外 mac 下 LUCI 可以编译过,但是测试程序调用 输入接口(mouse keyboard)和 显示接口挂了。

非常期待LCUI相关能慢慢完善起来,期待这么好的库完善,同时希望这个能跑在更多的嵌入式设备上,支持交叉编译 比如树莓派等,更好的结合opencv 在嵌入式终端上大放光彩。加油!

lc-soft commented 4 years ago

另外 mac 下 LUCI 可以编译过,但是测试程序调用 输入接口(mouse keyboard)和 显示接口挂了。

我没 Mac 环境,最多只处理了一些编译问题,运行问题还得由 Mac 开发者自己处理。

更好的结合opencv 在嵌入式终端上大放光彩。加油!

开源项目需要的是贡献者,用键盘敲再多的"希望"和“加油”也没用。既然你提到 OpenCV,可否分享一下你对"更好的结合 OpenCV"的想法和建议?

支持交叉编译 比如树莓派等

现在不支持交叉编译?只要交叉编译器能编译 C 语言编写的 hello world,那就应该能编译 LCUI,要是不支持,建议你提供系统环境相关信息和编译器的输出内容。

linuxsky commented 4 years ago

1、好的,mac的log 稍后 我发出来看下,应该不是编译问题。mac 和linux 库不同 暂时应该是不支持。 2、opencv 我理解目前多的是用来展示 嵌入式设备 在人工智能方面效果,目前很多都是用qt 做的demo ,可以考虑用luci 做个demo。 3、交叉环境我还没试,买个设备还没到,等收到了我编译下试试。

lc-soft commented 4 years ago

@linuxsky 是 lc ui,不是luci

lc-soft commented 4 years ago

1、好的,mac的log 稍后 我发出来看下,应该不是编译问题。mac 和linux 库不同 暂时应该是不支持。

不用发了,暂不打算搞 Mac 支持。

2、opencv 我理解目前多的是用来展示 嵌入式设备 在人工智能方面效果,目前很多都是用qt 做的demo ,可以考虑用luci 做个demo。

这个很简单,你可以写个 OpenCV 的图像数据转换程序,将它的数据转换为 LCUI_Graph 数据结构:

https://github.com/lc-soft/LCUI/blob/a10df88d99e58b16dd88bf3b331070035a3ac80f/include/LCUI/types.h#L274-L289

然后调用 LCUI_WritePNGFile() 将数据写入至 PNG 文件,如果 PNG 图片内容正常,则说明转换成功。

https://github.com/lc-soft/LCUI/blob/a10df88d99e58b16dd88bf3b331070035a3ac80f/src/image/png.c#L227-L230

这样我只需要加上图形界面代码让它直接显示的屏幕上,无需花时间研究 OpenCV 了。

lc-soft commented 4 years ago

构建脚本已经更新,跑以下命令可直接构建:

npm install
sh ./setup.sh
xmake

image

现在只是能够成功编译运行,界面样式、布局和功能代码有待调整。

linuxsky commented 4 years ago

测试了 已经好了