Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/155.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript node.js C+中未定义的符号+;Linux下的插件,为什么? 我是No.js.< /P>中的C++编写插件的新手。_Javascript_C++_Linux_Node.js_V8 - Fatal编程技术网

Javascript node.js C+中未定义的符号+;Linux下的插件,为什么? 我是No.js.< /P>中的C++编写插件的新手。

Javascript node.js C+中未定义的符号+;Linux下的插件,为什么? 我是No.js.< /P>中的C++编写插件的新手。,javascript,c++,linux,node.js,v8,Javascript,C++,Linux,Node.js,V8,这是我的模块: $ npm install simpleini 它基于minini-0.9。我的源代码在src/simpleIni.cc下。 我在Windows、OSX、Linux(Debian)下尝试过这个模块。 它在Windows和OS X下运行良好 但当我在Linux中运行时,似乎: node: symbol lookup err: .../simpleIni.node: undefined symbol: _ZNK10INISection10ReadStringEPKcRS1_ 为什

这是我的模块:

$ npm install simpleini
它基于minini-0.9。我的源代码在
src/simpleIni.cc
下。 我在Windows、OSX、Linux(Debian)下尝试过这个模块。 它在Windows和OS X下运行良好

但当我在Linux中运行时,似乎:

node: symbol lookup err: .../simpleIni.node: undefined symbol: _ZNK10INISection10ReadStringEPKcRS1_

为什么?

经过一些搜索,这就是我发现的

做:

$ nm -C build/Release/simpleIni.node  | grep ReadString
                 U INISection::ReadString(char const*, char const*&) const
00000000000032b0 t INISection::ReadString(char const*, char const*&) const [clone .part.11]
0000000000003f80 W INISection::ReadString(std::string const&, std::string&) const
00000000000081a0 T INISection::ReadStrings(char const*, char const**, unsigned int) const
0000000000008f20 T INISection::ReadStrings(std::string const&, std::vector<std::string, std::allocator<std::string> >&) const
000000000000bca0 r INISection::ReadString(char const*, char const*&) const::__PRETTY_FUNCTION__
000000000000b8a0 r INISection::ReadStrings(char const*, char const**, unsigned int) const::__PRETTY_FUNCTION__
这似乎是未定义的。。。虽然还有另一个符号的副本

00000000000032b0 t INISection::ReadString(char const*, char const*&) const [clone .part.11]
现在,我们可以在您的代码中搜索此方法:

在src/minini-0.9/minini/include/inisection.h

class INISection
{
...
        bool ReadString(const char * const name, const char * & out) const;
}
在src/minini-0.9/minini/src/inisection.cpp中

inline bool INISection::ReadString(const char * name, const char * & out) const
{
...
}
现在关键是这个内联。根据C++ FAQ

你(几乎总是)把{…}部分定义为 头文件中的内联函数用于避免“未解析的外部” 来自链接器的错误。如果将 函数在.cpp文件中的定义,以及该函数是否被调用 来自其他一些.cpp文件

从inisection.cpp中删除内联 我们可以再试一次

$ nm -C build/Release/simpleIni.node  | grep ReadString
00000000000069a0 T INISection::ReadString(char const*, char const*&) const
0000000000003f70 W INISection::ReadString(std::string const&, std::string&) const
00000000000080e0 T INISection::ReadStrings(char const*, char const**, unsigned int) const
0000000000008d20 T INISection::ReadStrings(std::string const&, std::vector<std::string, std::allocator<std::string> >&) const
000000000000bc20 r INISection::ReadString(char const*, char const*&) const::__PRETTY_FUNCTION__
000000000000b7e0 r INISection::ReadStrings(char const*, char const**, unsigned int) const::__PRETTY_FUNCTION__
$nm-C build/Release/simpleIni.node | grep ReadString
00000000000069a0 InSection::ReadString(字符常量*,字符常量*&)常量
000000000000 3F70 W INISection::ReadString(std::string const&,std::string&)const
00000000000080e0 INISection::ReadStrings(字符常量*,字符常量**,无符号整数)常量
000000000000 8D20 INISection::ReadStrings(std::string const&,std::vector&)const
000000000000bc20 InSection::ReadString(char const*,char const*&)const::\uu PRETTY\u函数__
000000000000b7e0 INISection::ReadStrings(char const*,char const**,unsigned int)const::\uu PRETTY\u函数__

这次没有未定义的符号,ReadString只显示一次。

er。。。我们需要看到更多的代码,而不是名称或源文件。我不确定如何提供JS C++插件。但是,如果您有动态库(在unix中),则可以使用nm来验证失败符号是否已定义。session10 ReadString中的这个名称有什么意义吗?您已经声明了但忘记定义的内容?很抱歉,我还没有将其推送到github。但您可以通过npm安装获得代码。因为它有多个文件。但是我的源文件只是simpleIni.c尝试删除
src/minini-0.9/minini/src/inisection.cpp中的
inline
,那么我可以将内联函数的定义移到头文件中吗?@XadillaX。。。如果你想让它在线,你应该。
$ nm -C build/Release/simpleIni.node  | grep ReadString
00000000000069a0 T INISection::ReadString(char const*, char const*&) const
0000000000003f70 W INISection::ReadString(std::string const&, std::string&) const
00000000000080e0 T INISection::ReadStrings(char const*, char const**, unsigned int) const
0000000000008d20 T INISection::ReadStrings(std::string const&, std::vector<std::string, std::allocator<std::string> >&) const
000000000000bc20 r INISection::ReadString(char const*, char const*&) const::__PRETTY_FUNCTION__
000000000000b7e0 r INISection::ReadStrings(char const*, char const**, unsigned int) const::__PRETTY_FUNCTION__