gpt4 book ai didi

include - 如何在 Forth 中包含 C 库

转载 作者:行者123 更新时间:2023-12-02 18:29:31 26 4
gpt4 key购买 nike

默认情况下,Forth 只有少量工作库,因此一切都必须从头开始编程。原因是,基于堆栈的 Forth 虚拟机将自己定位为一个精简的系统。

根据 Gforth 手册,可以使用现有的 C 库并访问用 C 编写的预编译图形库和游戏引擎。在将 C 库包含在 Forth 中之前,最好先测试该库在普通的 C 项目中。

我从头开始用 C 创建了一个库。它提供了一个add函数,可以从主程序中调用。文件已编译并链接,并且工作正常。

### add.c ###
int add(int a, int b) {
return a + b;
}
### add.h ###
int add(int, int);

### main.c ###
#include <stdio.h>
#include "add.h"
void main() {
printf("5 + 7 = %d\n", add(5,7));
}

### compile ###
gcc -c -fPIC add.c
gcc -c main.c
gcc main.o add.o
./a.out
5 + 7 = 12

计划使用 Forth 的这个预编译 c 库。 Gforth 编译器为此目的提供了一个特殊的关键字,它将 Forth 程序与 C 库连接起来。不幸的是,我收到一条错误消息,指出找不到该库。即使手动将其复制到 Gforth 文件夹后,错误消息也不会消失。

### Forth source code ###
\c #include "add.h"
c-function add add n n -- n
5 7 add .
bye

### Execution ###
gforth "main.fs"
/home/user1/.gforth/libcc-tmp/gforth_c_7F5655710258.c:2:10: fatal error: add.h: No such file or directory
#include "add.h"
^~~~~~~
compilation terminated.

in file included from *OS command line*:-1
b.fs:3: libtool compile failed
5 7 >>>add<<< .
Backtrace:
$7F56556BD988 throw
$7F56556F9798 c(abort")
$7F56556F9F08 compile-wrapper-function

gforth: symbol lookup error: /home/user1/.gforth/libcc-tmp/.libs/gforth_c_7F0593846258.so.0: undefined symbol: add

### Copy missing file and execute again ###
cp add.h /home/user1/.gforth/libcc-tmp/
gforth "main.fs"
gforth: symbol lookup error: /home/user1/.gforth/libcc-tmp/.libs/gforth_c_7F5256AC2258.so.0: undefined symbol: add

“Forth-to-C 接口(interface)”有什么问题?

最佳答案

您必须将 add 声明为导出函数,将其编译为共享库(例如 libadd.so),并使用 add 添加此库-lib 字,参见 Declaring OS-level libraries

s" add" add-lib

注意:前缀“lib”和后缀“.so”会自动添加。

关于include - 如何在 Forth 中包含 C 库,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53934444/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com