g++编译命令出现两处“缺少参数”错误,请求技术排查
问题解决:PowerShell下g++编译命令的参数解析错误
你的错误根本不是g++的参数问题,是PowerShell的语法解析规则导致的:PowerShell会把逗号,当成参数分隔符,所以原来的-Wl,-soname,bridge.so会被拆成多个独立参数,触发"缺少参数"的错误。
解决办法
把包含逗号的链接器参数用引号包裹起来,让PowerShell把它当成一个完整的参数传递给g++。修改后的完整命令如下:
g++ -shared "-Wl,-soname,bridge.so" -o bridge.so bridge.o bme.o bNNI.o graph.o heap.o SPR.o traverse.o utils.o initialiser.o fastme.o -fopenmp -lm -lpthread
或者用单引号包裹也可以:
g++ -shared '-Wl,-soname,bridge.so' -o bridge.so bridge.o bme.o bNNI.o graph.o heap.o SPR.o traverse.o utils.o initialiser.o fastme.o -fopenmp -lm -lpthread
补充说明(帮你理解参数作用)
-Wl,-soname,bridge.so:这个是g++传递给链接器的参数。-Wl,xxx的意思是把xxx直接传给链接器ld;-soname,bridge.so是链接器的参数,用来设置共享库的"soname"(共享库的标识符,系统加载共享库时会用到),这个参数本身是正确的,只是PowerShell的解析规则和类Unix shell不一样。- 如果是在Linux/macOS的bash/zsh等shell下执行原命令,完全不会有这个问题,只有PowerShell会出现这种逗号解析错误。
内容的提问来源于stack exchange,提问作者Henri Dehaybe
相关产品推荐
相关产品推荐

