g-wan:在/csp之外构建库,以及g++编译问题



我要试一试。

通过示例代码完成后,我开始了一个包含多个源文件的小项目。我现在有两个问题:

  1. 我得到了一个链接错误在服务器启动:

    链接main.cpp: undefined symbol: _ZN7GwanUrl9concatAllEv

(主文件#包含另外两个文件;所有文件都在CSP目录下)

  1. 作为在/csp目录中拥有所有文件的替代方案,我想在/csp目录之外创建一个库,同时仍然使用一些gwan函数。遗憾的是,当我从命令行而不是通过G-WAN启动GCC时,会出现大量错误。

    从/home/ec2-user/gwan/include/gwan.h:22,从Xbufstream.h: 10从Xbufstream.cpp: 10:/usr/include/time.h:199:错误:' size_t '没有命名类型…

有谁知道gwan ++参数字符串是什么样的吗?

(奇数1)和1。其1。和2。

首先,这不是链接器问题:您有"undefined symbol"而不是"unresolved symbol"作为错误。

这只是一个#include问题。

  1. 在script.cpp文件中定义main()函数

  2. 有一个专用于用户定义的包含文件/gwan/include的G-WAN文件夹,但你也可以使用/csp/my_include.hpp…如果你使用正确的语法:

例如,在/csp/hello.cpp中有#include "toto.hpp"可以让我在gwan/include/toto.hpp文件中定义和实现的c++函数(或在toto.hpp中定义的并在预编译的库中实现)链接到您的脚本与#pragma链接)。

如果你想使用#include <toto.hpp>,那么系统包含路径将被搜索(如果你的库是正确安装的,这将工作)。

如果你想使用#include "toto.hpp"的自定义文件夹,没有在系统中设置,你可以使用G-WAN的#pragma include "../my_folder"指令来指定它的路径,或者你可以显式地指定它在每个include: #include "../my_folder/toto.hpp"

没有什么特别的,只有C/c++依赖规则适用(G-WAN通过提供不涉及系统设置的替代方法而真正有所帮助)。

对于库(参见SQLite, Cairo, mySQL, cURL等的G-WAN示例),您可以使用预先安装的库,并将其位置导出到SYSTEM变量中…或者把你的库放在/gwan/libraries文件夹中,把它们的include文件放在/gwan/include文件夹中。

在编写自己的库时,请记住它们需要预编译。这意味着您显然不能使用G-WAN符号,因为您的编译器可能#包括"gwan.h"(以获得定义),但您的链接器将不知道从哪里可以找到G-WAN符号。解决方法是始终使用G-WAN脚本中的G-WAN API。您的自定义库必须是通用的,或者缓冲打算由G-WAN使用的任何有效负载。不需要双重复制,因为G-WAN提供了set_reply()调用,让G-WAN使用在没有G-WAN servlet提供的reply xbuffer的情况下构建的持久响应。

现在,关于linking的最后一句话(它不是你麻烦的原因,但可能参与混乱)。如果你混合使用C和c++,使用extern C {}来包装从C调用的c++原型(否则你将真的"unresolved symbols")。有了这些信息,你应该准备好面对各种可能的情况。

在#include文件中引用gwan.h符号的问题也可以解决通过将所有代码移动到头文件中,无论是。h还是。hpp

是不优雅的,但仍然是一个修复。并且对于我想要的简单扩展来说已经足够好了。

查找/libraries/sqlite3/sqlite.h有帮助。

@gil,谢谢你的时间。

相关内容

  • 没有找到相关文章

最新更新