C++ Linux上的FreeImage返回-1格式

C++ Linux上的FreeImage返回-1格式,c++,linux,freeimage,C++,Linux,Freeimage,我是Ubuntu 16.04 LTS的快乐用户。不久前,我试着从FreeImage的两个方面构建FreeImage。后来我完全卸载了它,并从apt get by安装了相同的版本 sudo apt-get install libfreeimage3 指挥部。 不过,问题是一样的。我使用的是FrimIn在Linux版本的单声道,虽然问题仍然是从C++代码。 假设我们有main.cpp文件,其代码如下所示: #include <FreeImage.h> #include <iost

我是Ubuntu 16.04 LTS的快乐用户。不久前,我试着从FreeImage的两个方面构建FreeImage。后来我完全卸载了它,并从apt get by安装了相同的版本

sudo apt-get install libfreeimage3
指挥部。 不过,问题是一样的。我使用的是FrimIn在Linux版本的单声道,虽然问题仍然是从C++代码。 假设我们有main.cpp文件,其代码如下所示:

#include <FreeImage.h>
#include <iostream>

using namespace std;

int main()
{
    FreeImage_Initialise();
    FREE_IMAGE_FORMAT format = FreeImage_GetFIFFromFilenameU(L"/home/nikys/1.jpg");
    cout << format << endl;
    FreeImage_DeInitialise();
}
我收到.exr和.jpg文件的结果“-1”

问题是,我在Windows for.NET上有FreeImage库,它为相同的对象返回正确的格式(Linux Mono上的相同代码与前面提到的共享对象链接,也为我提供了“-1”,没有任何DllNotFoundException或EntryPointNotFound)。 可能出了什么问题?请求信息,因为我肯定忘了提及重要信息

UPD1: 如果我使用

我很快乐,像正常人一样拥有“2”。
但是,对于宽字符串或FreeImage\u GetFileTypeU,而不是FreeImage\u GetFIFFromFilenameU,它告诉我正确的结果:(

Linux用于文件和输入UTF8编码,而不是宽字符串。
要使您的代码在不同的操作系统中工作,您需要使用
#如果已定义(OS1).#否则…
或使用Qt或wxWidgets之类的多操作系统API。

好吧,这一点我可以理解(关于#ifndef),但我应该如何格式化Linux的路径?我确信我可以用西里尔字母符号创建目录。因此,它不能用字符*解释。在Linux中,如果没有ASCII字符,则相应的
char
序列(即UTF-8编码中的内部表示)应为后缀。
g++ -I. -c main.cpp -o main.o -lc -lfreeimage
g++ main.o -o main -lc -lfreeimage
FREE_IMAGE_FORMAT format = FreeImage_GetFIFFromFilename("/home/nikys/1.jpg");
FREE_IMAGE_FORMAT format = FreeImage_GetFileType("/home/nikys/1.jpg");