GCC 和 NASM 链接到外部库
Posted
技术标签:
【中文标题】GCC 和 NASM 链接到外部库【英文标题】:GCC and NASM link to external library 【发布时间】:2012-06-05 19:25:06 【问题描述】:我想在 Assembly(使用 NASM)中创建一个简单的应用程序,它将获取命令行参数。现在我使用extern _GetCommandLineA
和call _GetCommandLineA
来调用该函数。我编译代码并从 NASM 获取目标文件。
现在我想使用 GCC 来链接和创建 EXE。我不想使用标准库,所以我使用这个命令来构建可执行文件:
gcc test.obj -s -nostartfiles -nostdlib -nodefaultlibs -o test.exe
它给我一个Undefined reference to GetCommandLineA
错误,作为 ASM 的初学者,我不知道为什么?一些帮助将不胜感激。提前致谢!
【问题讨论】:
【参考方案1】:GetCommandLineA
和 GetCommandLineW
在 kernel32.dll
中定义,与大多数 Windows API 一样,它使用 WINAPI (stdcall) calling convention。
为了从程序集中调用此函数,您需要指定完全“装饰”的符号名称,在本例中为 _GetCommandLineA@0
将程序集文件中的_GetCommandLineA
替换为_GetCommandLineA@0
【讨论】:
以上是关于GCC 和 NASM 链接到外部库的主要内容,如果未能解决你的问题,请参考以下文章
[An Introduction to GCC 学习笔记] 08 链接外部外部动态库C标准
[An Introduction to GCC 学习笔记] 07 链接外部静态库