我很高兴Ubuntu 16.04 LTS的用户。不久前,我已经尝试过从FreeImage的sourceforge page构建FreeImage。后来我完全卸载了它并从apt-get by
安装了相同的版本sudo apt-get install libfreeimage3
命令。 虽然,问题是一样的。我在Linux版本的Mono中使用FreeImage,尽管问题仍然存在于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();
}
在编译之后(在&#34; apt-get&#34; -like install之后我将库的链接添加到/ usr / lib,所以可以找到它):
g++ -I. -c main.cpp -o main.o -lc -lfreeimage
g++ main.o -o main -lc -lfreeimage
我收到的结果&#34; -1&#34;用于.exr和.jpg文件。
事情是,我在Windows for .NET上有FreeImage库,它返回相同对象的正确格式(Linux Mono上的相同代码,与上述共享对象链接,给我&#34; -1&#34;没有任何DllNotFoundException或EntryPointNotFound)。 什么可能出错?请求信息,因为我肯定忘了提到人的重要信息。
UPD1: 如果我使用
FREE_IMAGE_FORMAT format = FreeImage_GetFIFFromFilename("/home/nikys/1.jpg");
或
FREE_IMAGE_FORMAT format = FreeImage_GetFileType("/home/nikys/1.jpg");
我很高兴并且有&#34; 2&#34;正常人会有。 虽然,对于宽字符串和FreeImage_GetFileTypeU,不是FreeImage_GetFIFFromFilenameU告诉我正确的结果。 :(
答案 0 :(得分:1)
Linux用于文件和输入UTF8编码,而不是宽字符串。
要使您的代码在不同的操作系统中运行,您需要使用#if defined(OS1)...#else...
包含一些命令,或者使用QOS或wxWidgets之类的multiOS API。