You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何用CMake编译纯汇编语言的静态库与共享库?

CMake构建NASM共享库报错解决方案

问题现象

静态库可正常构建,但生成共享库时出现大量类似label or instruction expected at start of line的错误,错误指向.o文件的每一行——这是因为CMake错误地用NASM去处理二进制目标文件,而非调用链接器完成共享库的链接步骤。

错误根源

你手动设置的CMAKE_ASM_NASM_CREATE_SHARED_LIBRARY变量完全错误:该变量用于定义如何链接目标文件生成共享库,但你写成了调用NASM(汇编编译器)而非链接器(如ld)。NASM会把输入的.o二进制文件当成汇编源码解析,自然会报语法错误。

修复方案

直接删除错误的set(CMAKE_ASM_NASM_CREATE_SHARED_LIBRARY ...)行即可,CMake默认会自动调用合适的链接器完成共享库构建。如果需要自定义链接命令,也要确保调用的是链接器而非NASM。

正确的CMakeLists.txt

enable_language(ASM_NASM)

project(mylibrary)

# 无需手动指定共享库构建命令,CMake会自动处理
add_library(mylibrary_static STATIC library.asm)
add_library(mylibrary_shared SHARED library.asm)

# 可选:让输出库名和命令行生成的一致(libreturn_number.a / libreturn_number.so)
set_target_properties(mylibrary_static PROPERTIES OUTPUT_NAME "return_number")
set_target_properties(mylibrary_shared PROPERTIES OUTPUT_NAME "return_number")

自定义链接命令(可选)

如果确实需要手动指定链接参数,正确的写法是调用ld或系统链接器:

set(CMAKE_ASM_NASM_CREATE_SHARED_LIBRARY "ld -shared -o <TARGET> <OBJECTS> <LINK_LIBRARIES>")

验证

执行以下命令构建:

mkdir build && cd build
cmake ..
make

会生成libreturn_number.a(静态库)和libreturn_number.so(共享库),与命令行手动构建的结果一致。

内容的提问来源于stack exchange,提问作者avighnac

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.31 08:59:20