qrencode - 分段错误(核心转储)

时间:2015-03-17 18:40:19

标签: c qr-code aix powerpc

我制作了一个工作程序,在给定某个字符串的情况下生成图像。它完全适用于我的Slackware 32位发行版和其他发行版也是32位。

现在我需要在客户机上实现它,这是一个AIX powerpc。它编译没有任何问题,似乎工作(每个其他功能工作并给出正确的结果),除非我称这两个函数" QRcode_encodeString"和" QRcode_encodeData"。 它一直给我分段错误。

你可以假设我的main()行只是那个函数调用:

#include <stdio.h>
#include <qrencode.h>

int main(void)
{
   QRcode* pQRC = QRcode_encodeString("abc", 0, QR_ECLEVEL_L, QR_MODE_8, 0);    
   return 0;
}

我在客户端计算机上没有gdb而没有root权限。它适用于&#34; QRcode_encodeStringMQR()&#34;它产生一个微型QR码,但这对我来说不是一个解决方案。它通过名称&#34; core&#34;生成一个转储文件。我不能使用它,因为那台机器没有gdb ......我假设我不能在另一台机器上打开它,因为它们不共享它建筑。我对如何解决这个问题一无所知......

此外,此代码适用于我的Slackware发行版。

不幸的是,我对powerpc和AIX的了解仅限于此体验。

我忘了提及,只有cc可用,我编译如下:

cc qrgen.c -lqrencode -L/usr/local/lib -I/usr/local/include

2 个答案:

答案 0 :(得分:1)

仅仅是为了获取信息,我能够在Linux on Power环境中编译它并且运行正常,没有分段错误。 机器:POWER8 操作系统:Ubuntu 15.04

ubuntu@ubuntu1504:~/qr$ cat hello.c 
#include <stdio.h>
#include <qrencode.h>

int main(void)
{
   QRcode* pQRC = QRcode_encodeString("abc", 0, QR_ECLEVEL_L, QR_MODE_8, 0);    
   return 0;
}

ubuntu@ubuntu1504:~/qr$ gcc hello.c  -lqrencode

ubuntu@ubuntu1504:~/qr$ ./a.out 

ubuntu@ubuntu1504:~/qr$ strace  ./a.out 
execve("./a.out", ["./a.out"], [/* 20 vars */]) = 0
brk(0)                                  = 0x1003f690000
access("/etc/ld.so.nohwcap", F_OK)      = -1 ENOENT (No such file or directory)
access("/etc/ld.so.preload", R_OK)      = -1 ENOENT (No such file or directory)
open("/etc/ld.so.cache", O_RDONLY|O_CLOEXEC) = 3
fstat(3, {st_mode=S_IFREG|0644, st_size=42765, ...}) = 0
mmap(NULL, 42765, PROT_READ, MAP_PRIVATE, 3, 0) = 0x3fff816c0000
close(3)                                = 0
access("/etc/ld.so.nohwcap", F_OK)      = -1 ENOENT (No such file or directory)
open("/usr/lib/powerpc64le-linux-gnu/libqrencode.so.3", O_RDONLY|O_CLOEXEC) = 3
read(3, "\177ELF\2\1\1\0\0\0\0\0\0\0\0\0\3\0\25\0\1\0\0\0\0\0\0\0\0\0\0\0"..., 832) = 832
fstat(3, {st_mode=S_IFREG|0644, st_size=67496, ...}) = 0
mmap(NULL, 131832, PROT_READ|PROT_EXEC, MAP_PRIVATE|MAP_DENYWRITE, 3, 0) = 0x3fff81690000
mmap(0x3fff816a0000, 131072, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_FIXED|MAP_DENYWRITE, 3, 0) = 0x3fff816a0000
close(3)                                = 0
access("/etc/ld.so.nohwcap", F_OK)      = -1 ENOENT (No such file or directory)
open("/lib/powerpc64le-linux-gnu/libc.so.6", O_RDONLY|O_CLOEXEC) = 3
read(3, "\177ELF\2\1\1\3\0\0\0\0\0\0\0\0\3\0\25\0\1\0\0\0@R\2\0\0\0\0\0"..., 832) = 832
fstat(3, {st_mode=S_IFREG|0755, st_size=1789000, ...}) = 0
mmap(NULL, 1860208, PROT_READ|PROT_EXEC, MAP_PRIVATE|MAP_DENYWRITE, 3, 0) = 0x3fff814c0000
mmap(0x3fff81670000, 131072, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_FIXED|MAP_DENYWRITE, 3, 0x1a0000) = 0x3fff81670000
close(3)                                = 0
mprotect(0x3fff81670000, 65536, PROT_READ) = 0
mprotect(0x3fff816a0000, 65536, PROT_READ) = 0
mprotect(0x10010000, 65536, PROT_READ)  = 0
mprotect(0x3fff81720000, 65536, PROT_READ) = 0
munmap(0x3fff816c0000, 42765)           = 0
brk(0)                                  = 0x1003f690000
brk(0x1003f6c0000)                      = 0x1003f6c0000
exit_group(0)                           = ?
+++ exited with 0 +++

答案 1 :(得分:0)

我发现了问题... lib的安装产生了问题并导致符号链接作为一个简单的文件存在而且库就不存在......

这是丢失的文件&#34; /usr/local/lib/libqrencode.so.3.4.4"这是代码本身...我正在查看文件,并没有注意到它,因为有一个名为libqrencode.so.3.4的文件,但这个文件是一个libqrencode.so.3.4的符号链接。 4,因为libqrencode.so.3.4.4不存在,而不是符号链接失败,它创建了一个具有相同名称的空文件......