Python argc始终为零

Python argc始终为零,python,c,build,gdb,Python,C,Build,Gdb,这是这个问题的后续问题: 当我像这样编译程序时: gcc -fno-diagnostics-color -Wall -Wno-unused-function \ -I. -fPIC -g3 -shared -I/usr/include/python3.5m \ -I/usr/include/python3.5m -Wno-unused-result \ -Wsign-compare -g \ -fdebug-prefix-map=/build/python3.5-

这是这个问题的后续问题:

当我像这样编译程序时:

gcc -fno-diagnostics-color -Wall -Wno-unused-function \
    -I. -fPIC -g3 -shared -I/usr/include/python3.5m \
    -I/usr/include/python3.5m -Wno-unused-result \
    -Wsign-compare -g \
    -fdebug-prefix-map=/build/python3.5-nLrllb/python3.5-3.5.3=. \
    -fstack-protector-strong -Wformat -Werror=format-security \
    -DNDEBUG -g -fwrapv -O3 -Wall -Wstrict-prototypes \
    -L/usr/lib/python3.5/config-3.5m-x86_64-linux-gnu -L/usr/lib \
    -lpython3.5m -lpthread -ldl -lutil -lm -Xlinker -export-dynamic \
    -Wl,-O1 -Wl,-Bsymbolic-functions ./main.o ./binparser.o \
    -o protopy
大量选项是由于运行:

/usr/bin/python3.5-config--cflags
/usr/bin/python3.5-config--ldconfig
并尝试将它们合并到构建中(
-fPIC
似乎是强制性的,如果没有
-shared
它将不会链接,因为我认为,这是链接Python库的唯一方法

然后,当我在GDB中运行编译后的程序时,
main()
始终不获取任何参数。无论我是
r foo bar
还是
set args foo bar


有什么想法吗?我不知道这里所有的gcc选项都是做什么的,所以,可能是其中的一些?

期望
gdb
在一个被调用的共享对象中设置一个有意义的断点是不合理的,因为它就像一个可执行文件一样被调用。如果您对中所述的二进制文件使用
strace
,您将看到一个立即的segfault、 在任何系统调用之前,当在真正的可执行文件上使用
strace
时,您通常会从动态链接器中看到。

@wvxvm出于兴趣-您的主函数原型如何?@Neil
int main(int argc,char**argv)
你明确提到在GDB中运行。当你从命令行运行程序时,你会得到参数吗?@Gerhardh你的意思是什么?我在上面写了我如何使用
GDB
命令为程序提供参数。当我在调试器外部运行程序时,它会在任何用户代码运行之前出现故障,因此我无法告诉你它是否看到了故障他的论点,我猜不是,但我不能肯定,这个程序一定是太残暴了,以至于不能确切地说些什么。你可以通过打印
argc
argv
很容易判断你的程序是否得到了参数。我想知道你的程序或GDB的使用是否有问题谢谢。这会让你se.我怀疑
-shared
实际上做了什么,但我认为在这种情况下,这意味着与程序代码链接的其他代码将不会被链接进来。显然,我错了,感谢您澄清这一点。