我正在尝试编译使用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类型在Ztring.h中定义如下

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

最佳答案

发生这种情况是因为您使用的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);
}

09-05 22:50