2015-03-17 3 views
0

J'ai créé un programme de travail qui génère une image avec une certaine chaîne. Il fonctionne pleinement sur ma distribution Slackware 32bit et d'autres distributions aussi 32bit.qrencode - Défaut de segmentation (core dumped)

Maintenant, j'ai besoin de l'implémenter sur la machine client, qui est une powerpc AIX. Il compilé sans aucun problème, et semble fonctionner (toutes les autres fonctions fonctionnent et donne des résultats corrects), sauf quand j'appelle ces 2 fonctions "QRcode_encodeString" et "QRcode_encodeData". Il continue de me donner une erreur de segmentation.

Vous pouvez prendre ma main() ligne seulement est que l'appel de fonction:

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

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

Je n'ai pas gdb sur la machine cliente et pas PRIV racine. Cela fonctionne avec "QRcode_encodeStringMQR()" qui génère un micro QRcode, mais ce n'est pas une solution pour moi. Il génère un fichier de vidage sous le nom "core" que je ne peux pas utiliser car cette machine n'a pas gdb ... Et je suppose que je ne peux pas l'ouvrir sur une autre machine car ils ne partagent pas le même architecture. Je n'ai littéralement aucune idée sur la façon de résoudre ce problème ...

Encore une fois, ce code fonctionne sur ma distribution Slackware.

Mes connaissances sur powerpc et AIX se limitent malheureusement à cette expérience.

j'oublié de mentionner, que cc est disponible et je suis compilation comme ceci:

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

Il y a beaucoup plus de gens AIX qui traînent sur http://ittoolbox.com. Le site a une fonctionnalité appelée Groupes. Recherchez à la fois Unix et AIX. Il devrait y avoir quelque chose comme 'dbx' qui soit l'équivalent de' gdb'. Je pense que appropos fonctionne, alors essayez de chercher dbx ou debug. Bonne chance. – shellter

+0

Merci beaucoup! Vous avez raison, je dois utiliser dbx et non gdb, je n'avais aucune idée. Maintenant, je peux trouver ce bug embêtant! – Vcoder

Répondre

0

Je trouve le problème ... L'installation des problèmes générés lib et a provoqué l'a provoqué les liens symboliques d'exister en tant que simple fichier et la bibliothèque n'était pas là ...

Ceci est le fichier manquant "/usr/local/lib/libqrencode.so.3.4.4" qui est le code lui-même ... Je regardais les fichiers et ne l'ai pas remarqué parce que il y avait un fichier appelé libqrencode.so.3.4 mais ce fichier était supposé être un lien symbolique vers libqrencode.so.3.4.4 puisque libqrencode.so.3.4.4 n'existait pas, au lieu que le lien symbolique échouât, il créait un fichier vide avec le même nom ...

1

Pour information, je suis en mesure de compiler sur un Linux sur l'environnement d'alimentation et il fonctionne très bien, sans erreur de segmentation. Machine: POWER8 OS: Ubuntu 15,04

[email protected]:~/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; 
} 

[email protected]:~/qr$ gcc hello.c -lqrencode 

[email protected]:~/qr$ ./a.out 

[email protected]:~/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\[email protected]\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 +++ 
+0

Je pense que je l'ai compris, pourriez-vous me dire si votre ubuntu est de 32 ou 64 bits? – Vcoder