我决定在 tsocks 上做一些工作是一个有趣的副项目,因为它已经 8 年没有看到任何更新了。它托管在GitHub 上。
到目前为止,我只对代码进行了外观上的更改,但现在我遇到了编译器错误。根据dlopen(3)
:
过时的符号 _init() 和 _fini()
[...]
不推荐使用这些例程 [...]。它们的使用可能会导致不希望的行为,因为不会执行构造函数/析构函数例程(除非采取特殊措施)。
相反,库应该使用 __attribute__((constructor)) 和 __attribute__((destructor)) 函数属性导出例程。
不幸的是,此更改(提交 f785c8e)似乎是编译器错误的根源:
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
谁能帮我?我难住了。