qrencode - Грешка в сегментирането (изхвърлено ядро)

Направих работеща програма, която генерира изображение с определен низ. Той работи напълно с моята 32-битова дистрибуция на Slackware и други дистрибуции също 32-битови.

Сега трябва да го внедря на клиентската машина, която е AIX powerpc. Компилира се без никакъв проблем и изглежда работи (всяка друга функция работи и дава правилни резултати), освен когато извикам тези 2 функции "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 priv. Работи с "QRcode_encodeStringMQR()", който генерира микро QRcode, но това не е решение за мен. Той генерира дъмп файл с името "core", който не мога да го използвам, тъй като тази машина няма gdb... И предполагам, че не мога да го отворя на друга машина, тъй като те не споделят същата архитектура. Буквално нямам представа как да отстраня този проблем...

Отново, този код работи на моята Slackware дистрибуция.

Познанията ми за powerpc и AIX са ограничени само до този опит, за съжаление.

Забравих да спомена, само cc е наличен и компилирам така:

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

person Vcoder    schedule 17.03.2015    source източник
comment
има много повече хора от AIX, които висят на ittoolbox.com. Сайтът има функция, наречена Групи. Потърсете както Unix, така и AIX. Трябва да има нещо като dbx, което е еквивалентно на gdb. Мисля, че appropos работи, така че опитайте да потърсите dbx или debug. Късмет.   -  person shellter    schedule 18.03.2015
comment
Благодаря ти много! Прав си, трябва да използвам dbx, а не gdb, нямах представа. Сега мога да намеря този досаден бъг!   -  person Vcoder    schedule 18.03.2015


Отговори (2)


Само за информация, успях да го компилирам в 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 +++
person Breno Leitão    schedule 18.03.2015
comment
Мисля, че разбрах, бихте ли ми казали дали вашият ubuntu е 32 или 64-битов? - person Vcoder; 18.03.2015

Открих проблема... Инсталирането на lib генерира проблеми и причини символните връзки да съществуват като обикновен файл и библиотеката просто не беше там...

Това е липсващият файл "/usr/local/lib/libqrencode.so.3.4.4", който е самият код... Гледах файловете и не го забелязах, защото имаше файл, наречен libqrencode.so .3.4, но този файл трябваше да бъде символна връзка към libqrencode.so.3.4.4, тъй като libqrencode.so.3.4.4 не съществуваше, вместо символната връзка да се провали, той създаде празен файл със същото име. ..

person Vcoder    schedule 20.03.2015