Open zhangjiahua1109 opened 3 months ago
出现这种情况下的原因是 linux 平台依赖了两个动态库, list(APPEND libs ${CMAKE_CURRENT_SOURCE_DIR}/vendor/swiftshader/linux/x64/libEGL.so) list(APPEND libs ${CMAKE_CURRENT_SOURCE_DIR}/vendor/swiftshader/linux/x64/libGLESv2.so)
对于 linux 平台而言,关于动态库的查找顺序,可以看下这篇文章:https://www.jianshu.com/p/0de77454f105 可以将这两个动态库拷贝至 /usr/lib/ 目录下
请问,如果我想在docker中运行的话,如何解决?在docker中也会报空指针的信息,在宿主机上是可以跑的,docker中会报空指针。
都是一样的哈,linux 平台需要那两个动态库提供 OpenGL 的软环境,如果 PAGSurface 创建出来为空指针,基本上就是那两个库没有链接上
我用find命令查过了docker中是存在这两个库的,我怀疑是x11的问题,但是现在没法知道。
【版本信息】
4.3.3
【平台信息】
Linux
【预期的表现】
Linux中的示例demo跑通就行了。
【实际的情况】
Linux中的示例demo跑不通,报错:GLDevice::Make() eglCreatePbufferSurface error=12289 ---pagSurface is nullptr!!!
【Demo及附件】
include
include
include
include <pag/pag.h>
include <pag/file.h>
int64_t GetTimer() { static auto START_TIME = std::chrono::high_resolution_clock::now(); auto now = std::chrono::high_resolution_clock::now(); auto ns = std::chrono::duration_cast(now - START_TIME);
return static_cast(ns.count() * 1e-3);
}
std::shared_ptr ReplaceImageOrText()
{
auto pagFile = pag::PAGFile::Load("../assets/test2.pag");
if (pagFile == nullptr)
{
printf("pagFile == nullptr");
return nullptr;
}
}
int64_t TimeToFrame(int64_t time, float frameRate) { return static_cast(floor(time * frameRate / 1000000ll));
}
void BmpWrite(unsigned char image, int imageWidth, int imageHeight, const char filename) { unsigned char header[54] = {0x42, 0x4d, 0, 0, 0, 0, 0, 0, 0, 0, 54, 0, 0, 0, 40, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 32, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0};
}
int main(int argc, char* argv[]) { auto startTime = GetTimer(); // Register fallback fonts. It should be called only once when the application is being initialized. std::vector fallbackFontPaths = {};
fallbackFontPaths.emplace_back("../resources/font/NotoSerifSC-Regular.otf");
fallbackFontPaths.emplace_back("../resources/font/NotoColorEmoji.ttf");
std::vector ttcIndices(fallbackFontPaths.size());
pag::PAGFont::SetFallbackFontPaths(fallbackFontPaths, ttcIndices);
}
都是工程自带的demo以及pag文件。