Linux 针对iMX.53交叉编译的DirectFB-启动时崩溃

Linux 针对iMX.53交叉编译的DirectFB-启动时崩溃,linux,arm,cross-compiling,cortex-a8,directfb,Linux,Arm,Cross Compiling,Cortex A8,Directfb,尝试在基于i.MX53处理器(ARMCortex-A8内核)的嵌入式系统中使用directfb,该处理器运行Linux 2.6.35.3(由飞思卡尔提供) 我已经在我的i686 debian主机系统上安装了一个交叉编译器。交叉编译器来自embedian.org存档,是gcc-4.3-arm-linux-gnueabi包(arm-linux-gnueabi-gcc(Debian 4.3.2-1.1)4.3.2)。这是随glibc 2.7提供的。这是一个不同于我的目标系统上的版本,即glibc 2.

尝试在基于i.MX53处理器(ARMCortex-A8内核)的嵌入式系统中使用directfb,该处理器运行Linux 2.6.35.3(由飞思卡尔提供)

我已经在我的i686 debian主机系统上安装了一个交叉编译器。交叉编译器来自embedian.org存档,是gcc-4.3-arm-linux-gnueabi包(
arm-linux-gnueabi-gcc(Debian 4.3.2-1.1)4.3.2
)。这是随glibc 2.7提供的。这是一个不同于我的目标系统上的版本,即glibc 2.11,尽管我的阅读表明它们应该兼容

在对系统映像上已有的库进行了大量实验之后,我成功地编译了directfb 1.6.2。由于我没有已经安装的库的可用pkg config信息,这一点很复杂,但我最终设法说服它使用以下configure命令行进行编译:

TOP=`realpath ../..`
PKG_CONFIG_PATH=${TOP}/ext/libpng-1.5.13/ \
LIBPNG_CFLAGS=-I${TOP}/include \
LIBPNG_LDFLAGS="-L${TOP}/libs -lpng15 -lz" \
FREETYPE_CFLAGS=-I${TOP}/include \
FREETYPE_LIBS="-L${TOP}/libs -lfreetype" \
LIBS="-lgcc_s -lgcc -ldl -lstdc++ -lz" \
CFLAGS="-march=armv7-a" \
CXXFLAGS="-march=armv7-a" \
./configure CC=arm-linux-gnueabi-gcc CPPFLAGS=-I${TOP}/include LDFLAGS=-L${TOP}/lib \
   --build=i686-linux --host=arm-linux-gnueabi \
   --enable-static --disable-shared \
   --disable-freetype --enable-fbdev --disable-x11 \
   --with-gfxdrivers=none --with-inputdrivers=none
这成功地构建了,我可以编译并链接一个基于简单教程应用程序的示例应用程序——不幸的是,当在目标系统上运行时,应用程序会与SIGSEGV崩溃。directfb附带的一些工具也是如此,例如dfbinfo

下面是我的测试应用程序崩溃的堆栈跟踪(在使用命令行arg运行时”--dfb:fbdev=/dev/fb0”):

作为参考,崩溃前在应用程序中执行的唯一与directfb相关的代码直接从教程代码中复制:

Display::Display(int argc, char ** argv)
{
   DFBSurfaceDescription dsc;       
   DFBCHECK (DirectFBInit (&argc, &argv));  
   // ... crash occurs during execution of the line above
}
这是直接从我的主函数调用的,传递原始的未修改的argc和argv

我已在目标系统上安装了/usr/local/lib中的directfb库和/usr/local/bin中的二进制文件,并创建了/usr/local/share/directfb-1.6.2(包含cursor.dat和decker.dgiff)以及文档中建议的/etc/fb.mode

关于我做错了什么有什么建议吗?

阅读git.directfb.org的源代码并检查堆栈

#0  direct_map_lookup (map=0x0, key=0xdfd70) at map.c:298
#1  0x000b2d9c in direct_config_set (name=0xdfd70 "fbdev", value=0xdfd76 "/dev/fb0") at conf.c:542
映射为空。它应该在map.c:295处断言,但看起来它已被禁用,但在298处崩溃

hash = map->hash( map, key, map->ctx );
上一次呼叫是在conf.c:542中

ConfigOption *option = direct_map_lookup( config_options, name );
这意味着配置选项为
null
。在该文件中搜索时,仅指定给文件的位置是


我对directfb一无所知,但看起来您需要直接或间接地调用
\u D\u conf\u init

谢谢。这使我走上了正确的道路——似乎u_D_conf_init被设置为在libdirectfb.so动态链接到应用程序时自动调用。但我是静态链接的。静态链接显然是受支持的,但您必须采取特殊的步骤,而且用于执行这些步骤的脚本显然不再分发。切换到动态链接,一切正常。
ConfigOption *option = direct_map_lookup( config_options, name );