Zenlib错误:对使用typedef的Open函数调用的未定义引用

时间:2015-01-23 02:46:25

标签: c++

我正在尝试编译一个使用Zenlib的程序

见下面的代码

#include <iostream>
#include <string>
#include <sstream>
#include <ZenLib/Ztring.h>
#include <ZenLib/File.h>

using namespace std;


int main () {
      ZenLib::File From;
      ZenLib::tstring tstr("/path/to/file");
      From.Open(tstr);
}

libzen.so位于/ usr / lib / x86_64-linux-gnu /

编译命令

g++ -g tst1.cpp -o a.out -lpthread -lzen

我收到以下错误

/tmp/cck5s6iO.o: In function `main':
/tmp/tst1.cpp:13: undefined reference to `ZenLib::File::Open(std::string const&, ZenLib::File::access_t)'
collect2: error: ld returned 1 exit status

打开声明如下

bool Open  (const tstring &File_Name, access_t Access=Access_Read);

tstring typedefed在Ztring.h中,如下所示

typedef std::basic_string<Char, std::char_traits<Char>, std::allocator<Char> > tstring;

1 个答案:

答案 0 :(得分:1)

这是因为您使用的ZenLib编译为UNICODE。

尝试以下代码,它将起作用:

#include <iostream>
#include <string>
#include <sstream>

#define UNICODE // must define this before including ZenLib's headers
#include <ZenLib/Ztring.h>
#include <ZenLib/File.h>

using namespace std;


int main () {
      ZenLib::File From;
      ZenLib::tstring tstr(L"/path/to/file"); // use unicode string literal
      From.Open(tstr);
}