如何生成一个.so文件

3

我正在为Elementary OS Luna上的Scratch文本编辑器应用程序编写一个扩展。但是,扩展创建的文档实际上不存在,我不知道在编写扩展的主要代码后该如何继续。

我已经编写了扩展。由于需要“安装”,因此我无法使用或测试它。我花了几个小时寻找文档,但它们并不存在。但是,我在Scratch Launchpad页面上找到了一条评论,其中提到:

通常情况下,您需要生成一个pluginname.so文件,并将其放置在lib/scratch/plugins/pluginname中,并配合使用pluginname.plugin文件

太好了。这似乎是创建Scratch扩展的最后一部分。什么是.so文件,我该如何生成它?我已经创建了其他必要的文件,例如.plugin文件和.vala文件。

是的,我搜索过.so文件,但我找到的都是关于它的随机信息,例如在C或C++头文件中使用它,但显然对于我来说行不通,因为我正在使用Vala?

我该如何生成.so文件?我从哪里生成它?


1
这不是随机的!你用一种生成.so文件的语言(如C/C++等)编写扩展,然后在你的Scratch应用程序中使用它。请参阅此问答https://dev59.com/j2kw5IYBdhLWcg3wkLQX - Preet Sangha
@PreetSangha 谢谢你提供的链接 :-) 顺便问一下,.so 文件基本上就像 Windows 中的 DLL 吗? - uSeRnAmEhAhAhAhAhA
你有其他的资源吗?我不知道那个页面在说什么 :( - uSeRnAmEhAhAhAhAhA
是的,你说得对。为了回答你的问题,这个页面上的链接展示了例如使用GCC如何创建它们。但你仍然需要编写代码。我的问题是,能否在你的问题中加入一些描述你所遵循的内容的链接。也许有人可以看出你需要做些什么。 - Preet Sangha
谢谢你的帮助,@PreetSangha。我现在回来了,正在看你的答案。 - uSeRnAmEhAhAhAhAhA
2个回答

2

我认为Vala教程对于创建实际的共享库共享对象会很有帮助。

你可以使用autotoolscmake或者直接从命令行编译和链接共享库,引用自Vala教程:

Compilation and linking using Command Line

Vala is not yet capable of directly creating dynamic or static libraries. To create a library, proceed with the -c (compile only) switch and link the object files with your favourite linker, i.e. libtool or ar.

$ valac -c ...(source files) 
$ ar cx ...(object files)

or by compiling the intermediate C code with gcc

$ valac -C ...(source files) 
$ gcc -o my-best-library.so --shared -fPIC ...(compiled C code files)...

1
谢谢@user,我会研究一下。看起来很有前途!:-D +1 - uSeRnAmEhAhAhAhAhA

1

来自Scratch Wiki

由于浏览器安全限制,Scratch 2.0不能直接与硬件设备交互。相反,硬件扩展配有一个帮助程序,这是用户必须安装和运行的单独应用程序。Scratch通过HTTP请求与帮助程序通信,而帮助程序则与硬件通信。将来,一些扩展可能会将其辅助应用程序打包为浏览器插件。

以下是创建和测试Scratch扩展的步骤:

  1. 创建扩展描述文件
  2. 创建您的帮助程序并启动它
  3. 打开Scratch 2离线编辑器
  4. 导入扩展描述(在“文件”上按shift键并从菜单中选择“导入实验性扩展”)
  5. 新的扩展块将出现在“更多块”调色板中
  6. 测试您的扩展并进行迭代!

辅助应用程序可以使用支持服务器套接字的任何语言编写,例如Python、Node.js、Java、C等。

和你一样,我在维基上搜索了很久,但是找不到一个带有源代码的例子。所以我只能就你的问题进行一般性回答。

如果你看一下使用gcc命令行从.c文件构建.so文件,你会看到如何创建一个简单的.so文件。然而,哪些代码应该放入Scratch扩展中,我不知道。抱歉。

编辑:通过更多的谷歌搜索,我发现来自Nathan Dinsmore在GitHub上的一个示例,它不使用C,而是使用JavaScript,虽然它不创建.so扩展,但它提供了完整的创建扩展的描述。他还提供了几个教程

编辑++:这里还有另一个用Java编写的示例


1
我认为我们在这里谈论的是两件不同的事情。你提供的Scratch Wiki似乎是针对Scratch文本编辑器之外的东西。我认为你提供的是Scratch编程语言的内容。而你提供的示例是Scratch语言的扩展。我认为这就是让我感到困惑的原因;没有资源可以用来制作Scratch文本编辑器的扩展。 - uSeRnAmEhAhAhAhAhA
有两个Scratch。一个是随Linux发行版Elementary OS一起提供的Scratch文本编辑器,另一个是编程语言Scratch。我正在寻找前者的资源。 - uSeRnAmEhAhAhAhAhA
我无法使用你提供的那些页面中包含的信息,因为创建Scratch扩展(它们是用Vala而不是C或C++编写的)时,你不会创建可执行文件,而只是将它们保存为.vala文件。而该教程依赖于可执行文件。我已经按照该教程进行了操作,但由于没有可执行文件(你不会为Scratch文本编辑器扩展创建可执行文件),所以无法生成.so文件。 - uSeRnAmEhAhAhAhAhA
好的,我看到了我的错误,我猜想我应该等到你放上了你所指的“Scratch”的链接。这就是生活!好的,我应该删除这个答案吗? - Preet Sangha

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接