我要试一试。
通过示例代码完成后,我开始了一个包含多个源文件的小项目。我现在有两个问题:
-
我得到了一个链接错误在服务器启动:
链接main.cpp: undefined symbol: _ZN7GwanUrl9concatAllEv
(主文件#包含另外两个文件;所有文件都在CSP目录下)
-
作为在/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
问题。
-
在script.cpp文件中定义main()函数
-
有一个专用于用户定义的包含文件
/gwan/include
的G-WAN文件夹,但你也可以使用/csp/my_include.hpp…如果你使用正确的语法:
例如,在/csp/hello.cpp中有 如果你想使用 如果你想使用 没有什么特别的,只有C/c++依赖规则适用(G-WAN通过提供不涉及系统设置的替代方法而真正有所帮助)。 对于库(参见SQLite, Cairo, mySQL, cURL等的G-WAN示例),您可以使用预先安装的库,并将其位置导出到SYSTEM变量中…或者把你的库放在 在编写自己的库时,请记住它们需要预编译。这意味着您显然不能使用G-WAN符号,因为您的编译器可能#包括"gwan.h"(以获得定义),但您的链接器将不知道从哪里可以找到G-WAN符号。解决方法是始终使用G-WAN脚本中的G-WAN API。您的自定义库必须是通用的,或者缓冲打算由G-WAN使用的任何有效负载。不需要双重复制,因为G-WAN提供了 现在,关于#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"
。/gwan/libraries
文件夹中,把它们的include文件放在/gwan/include
文件夹中。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,谢谢你的时间。