PowerShell中pkg-config子表达式无法用于OpenCV编译的解决方法咨询
在PowerShell 5.1中正确传递pkg-config输出编译OpenCV程序
可行解决方案
方法1:拆分输出为独立参数传递
PowerShell 5.1会把$(pkg-config ...)的输出当成单个字符串传给g++,导致参数无法被正确识别。用-split按空白拆分输出为参数数组即可:
g++ main.cc -o main $($(pkg-config --cflags --libs opencv4) -split '\s+')
方法2:用Invoke-Expression执行完整命令
把整个编译命令拼成字符串,让PowerShell重新解析参数:
iex "g++ main.cc -o main $(pkg-config --cflags --libs opencv4)"
方法3:提前存参数到变量
先拆分参数到变量,再传递给g++,可读性更强:
$opencvParams = $(pkg-config --cflags --libs opencv4) -split '\s+' g++ main.cc -o main $opencvParams
问题原因
PowerShell 5.1和Bash处理子进程输出的逻辑不同:Bash会自动把反引号包裹的输出拆分成多个独立命令行参数,而PowerShell默认将$(...)的输出作为单个字符串参数传递给外部程序(比如g++)。g++收到整串参数后,无法识别其中的-I、-L等独立选项,自然找不到OpenCV的头文件。而手动复制参数时,你是输入多个独立参数,PowerShell会正确传递每个参数,所以编译能成功。
内容的提问来源于stack exchange,提问作者flavioarp
相关产品推荐
相关产品推荐

