J'ai décidé que ce serait un projet amusant de travailler sur les tsocks, car il n'a pas été mis à jour depuis 8 ans. Il est hébergé here sur GitHub.Erreur du compilateur lors de la modification de l'obsolète _init() pour utiliser __attribute ((constructeur))
J'ai seulement fait des changements cosmétiques au code jusqu'ici, mais maintenant j'ai couru dans une erreur de compilateur. Selon dlopen(3)
:
The obsolete symbols _init() and _fini()
[...]
Using these routines [...] is not recommended. Their use may result in undesired behavior, since the constructor/destructor routines will not be executed (unless special measures are taken).
Instead, libraries should export routines using the __attribute__((constructor)) and __attribute__((destructor)) function attributes.
Malheureusement, ce changement (commit f785c8e) semble être la source de l'erreur du compilateur:
gcc -fPIC -g -O2 -Wall -I. -c tsocks.c -o tsocks.o
gcc -fPIC -g -O2 -Wall -I. -c common.c -o common.o
gcc -fPIC -g -O2 -Wall -I. -c parser.c -o parser.o
gcc -fPIC -g -O2 -Wall -I. -static -o saveme saveme.c
gcc -fPIC -g -O2 -Wall -I. -o inspectsocks inspectsocks.c common.o -lc
gcc -fPIC -g -O2 -Wall -I. -o validateconf validateconf.c common.o parser.o -lc
gcc -fPIC -g -O2 -Wall -I. -o libtsocks.so.1.8 tsocks.o common.o parser.o -ldl -lc -rdynamic
/usr/lib/gcc/i686-redhat-linux/4.4.4/../../../crt1.o: In function `_start':
(.text+0x18): undefined reference to `main'
collect2: ld returned 1 exit status
Quelqu'un peut-il me aider? Je suis perplexe.
Cela a fonctionné. Les lignes 'ln' ne sont pas nécessaires; 'make install' finit par créer les liens. Je suppose que je devrais lire sur autoconf et les bibliothèques. J'aime sauter dans des projets non préparés; Je peux apprendre toutes ces nouvelles choses. Merci! – Nomexous