C++ Linux上的FreeImage返回-1格式
我是Ubuntu 16.04 LTS的快乐用户。不久前,我试着从FreeImage的两个方面构建FreeImage。后来我完全卸载了它,并从apt get by安装了相同的版本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
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");