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

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

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

您可以假设我的main()唯一行是该函数调用:

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

我没有在客户端计算机上的gdb和没有root priv。 它适用于生成微QR QR码的“QRcode_encodeStringMQR()”,但这对我来说不是解决方案。 它生成一个名为“core”的转储文件,我无法使用它,因为该机器没有gdb ……我假设我无法在另一台机器上打开它,因为它们不共享相同的架构。 我对如何解决这个问题一无所知……

同样,这段代码适用于我的Slackware发行版。

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

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

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

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

 ubuntu@ubuntu1504:~/qr$ cat hello.c #include  #include  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 +++ 

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

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