从python编译Cpp失败,但不会在shell中失败

Cpp compilation from python fail but not in the shell

本文关键字:失败 shell python 编译 Cpp      更新时间:2023-10-16

我有一个cpp文件,通过使用shell可以很好地编译g++:

extern "C"{
  #include <quadmath.h>
}
inline char* print( const __float128& val)
{
  char* buffer = new char[128];
  quadmath_snprintf(buffer,128,"%+.34Qe", val);
  return buffer;
}
int main(){
    __float128 a = 1.0;
    print(a);
    return 0;
}

然而,当我试图通过python脚本编译它时,它失败了,出现以下错误:

"对quadmath_snprintf的未定义引用"

这里是python脚本的代码:

import commands
import string
import os
(status, output) = commands.getstatusoutput("(g++ test/*.c -O3 -lquadmath -m64)")

你知道怎么解决这个问题吗?谢谢。

当您打开一个shell时,会为您静默初始化所有的东西,对于您的问题最重要的是,会设置环境变量。您最有可能忽略的是LIBRARY_PATH的定义,这是链接器使用的变量,用于查找与使用-lNAME标志指示它链接的库相匹配的库。

链接器需要的是一个目录列表,它将在其中搜索与libNAME.{a,so}匹配的文件。你也可以直接使用-L标志传递这些目录,但一般来说,你应该尝试使用CMake, Make或任何其他构建工具。

这将给你访问命令像find_packagetarget_link_libraries (CMake),分别查找,添加库到你的构建目标,而不必维护你的python来编译你的东西。