是否有一种方法将我的GCL Lisp文件与Windows上的单独c++程序链接
Is there a way to link my GCL Lisp file with a separate C++ program on Windows?
我已经找了一些关于这方面的信息,但没有发现任何非常有用的信息。
背景我安装的是GNU Common Lisp。我可以创建一个Lisp文件,并使用以下命令将其编译为.o对象文件:
gcl -compile <my lisp filename>
一旦我有了。o文件,我使用命令(使用MinGW):
g++ -o myProgram.exe temp.o temp.cpp
我的Lisp文件在GCL中工作。我的temp.cpp文件是:
//function from (defun fib (x) ...) in lisp file
extern int fib(int);
#include <iostream>
int main()
{
int val;
std::cout << "Print Fibonacci numbers" << std::endl;
std::cout << ">";
std::cin >> val;
while (val != -1)
{
std::cout << fib(val) << std::endl << std::endl;
std::cout << ">";
std::cin >> val;
}
return 0;
}
我在编译时得到的错误是:
temp.cpp:(.text+0x180): undefined reference to `fib(int)'
temp.o:temp.c:(.text+0xb): undefined reference to `vs_base'
temp.o:temp.c:(.text+0x17): undefined reference to `vs_limit'
temp.o:temp.c:(.text+0x1d): undefined reference to `vs_top'
temp.o:temp.c:(.text+0x2d): undefined reference to `small_fixnum_table'
...
错误很长,看起来像GCL中定义的所有函数。
我的问题
所以,最后我的问题。我想做的事情可能吗?如果我计划将其与c++程序链接,我是否需要以某种方式包括整个GCL库?
首先,我不确定是否可以从c++调用GCL编译的函数。比较CL和c++函数的定义:
(defun fib (x) ...)
和
int fib(int)
第二个函数是严格类型的,而第一个函数接受并返回任何对象。那么,g++应该在temp.o
文件中搜索什么函数呢?即使在CL的函数中声明类型,编译后的函数是否与c++的函数具有相同的格式?即使是像c++和Delphi这样类似的语言,如果没有特殊的指令,也不能连接在一起,因为向函数堆栈传递参数的顺序不同。再深入一点,您可以看到c++和CL具有完全不同的内存管理策略,因此如何将它们一起使用完全不清楚。
my-lisp-module
,您可以为其公共函数创建简单的套接字接口,并从您喜欢的任何语言调用它们。虽然使用桥梁非常灵活,但不是很方便。将Common Lisp嵌入c++程序的另一种方法是…使用嵌入式公共Lisp。它是专门为你这样的目的设计的。你可以在他们的手册页面上找到嵌入规则。
最后,您可以为平台使用Common Lisp实现,该平台已经支持与c++代码集成。如果您只在Windows中工作,那么将您的应用程序集成到CLR的一个CL实现上一定很容易。如果您打算迁移到Linux, JVM的实现也是可用的。相关文章:
- Windows C++:文件夹移动访问被拒绝错误
- 是否有一个Windows驱动程序函数可以执行Windows文件api SeFileAttributes的等效功能
- Windows 文件系统 API 不同的输出
- 有人可以解释一下与 Windows 文件系统相关的C++转义字符" "吗?
- GetFullPathNameW 和长 Windows 文件路径
- 在C++中重命名Windows文件夹
- Windows 文件:同时使用 ReadFile 和映射
- 在XP上使用windows文件资源管理器时,停止打开explorer.exe任务栏
- 如何在Qt/C++中设置Windows文件权限
- 如何设置 windows 文件打开对话框筛选器以包含"必须完成"选项
- 在 C++ 中设置内置 exe 的 Windows 文件详细信息
- SHGetFolderPath 已弃用:检索 Windows 文件夹路径的替代方法是什么
- 如何使用 c++ 和 windows api 获取 Windows 文件"author"而不是所有者
- c++ boost asio Windows文件句柄async_read_until无限循环-没有eof.< /
- 拦截Windows文件系统,编辑数据
- 这是正确的使用windows文件API吗?(多个重叠的请求)
- 检查windows文件权限
- 将当前用户名写入windows文件
- 如何判断文件夹是否是特殊Windows文件夹的子文件夹
- 64位Windows文件打开