小编Bha*_*waj的帖子

LLVM作为不同语言的基本编译器

我是LLVM编译器和基础架构的新手.我有以下想法.Clang是C/C++的LLVM前端,类似Rustc for Rust编程语言.两者都可以发出LLVM IR代码,并且可以将发出的代码编译为可执行应用程序.

我的问题是可以链接不同的编程语言吗?示例如下 -

/* Code in C */
int add(int, int);
int main()
{
  printf("%d", add(5 ,6));
}
Run Code Online (Sandbox Code Playgroud)

以Rust中定义的函数为例

// Code in Rust
fn main()
{
  println!("{}", add(5, 6));
}

fn add (x: i32, y: i32) -> i32
{
  x + y
}
Run Code Online (Sandbox Code Playgroud)

从两个源文件生成IR后,是否可以链接它们并创建单个应用程序?

我很想知道这是否有效,请告诉我.

c llvm dynamic-linking llc rust

5
推荐指数
2
解决办法
638
查看次数

Clang 编译器阶段

Clang Compiler 是基于 LLVM 基础架构构建的,Clang 前端采用 C/C++ 源代码并生成 LLVM-IR,谁来使用优化器和代码生成?

由于优化器传递库要按顺序放置和调用以生成优化代码,那么指定的顺序在哪里,也是谁生成的目标代码?这是 Clang 前端程序的一部分还是有任何其他程序可以进行这种优化和生成?

llvm clang

5
推荐指数
1
解决办法
846
查看次数

无法执行 Cython 包装的 Python 代码

我正在使用 Cython 为 python 代码导出 C++ API。该应用程序将在 Ubuntu 上执行。项目文件在这里

我正在包装的函数,读取图像的文件名并显示图像。该Show_Img.pyx文件如下所示

import cv2

cdef public void Print_image(char* name):
  img = cv2.imread(name)
  cv2.imshow("Image", img)
  while(True):
    if cv2.waitKey(1) & 0xFF == ord('q'):
      break
Run Code Online (Sandbox Code Playgroud)

Cython 生成的 c++ 接口如下所示

__PYX_EXTERN_C DL_IMPORT(void) Print_image(char *);
Run Code Online (Sandbox Code Playgroud)

头文件包含在 my 中algo.cpp,它调用如下函数

#include<iostream>
#include<Python.h>
#include"Show_Img.h"
using namespace std;

int main(){
  char *name = "face.jpg"; 
  Py_Initialize();
  Print_image(name);
  Py_Finalize();
  return 0;
}
Run Code Online (Sandbox Code Playgroud)

使用下面的命令,我也可以编译上面的代码并生成应用程序

g++ algo.cpp `pkg-config --libs --cflags python-2.7` `pkg-config --libs --cflags opencv` -L. -lShow_Img -o algo
Run Code Online (Sandbox Code Playgroud)

库的路径 …

c++ opencv g++ shared-libraries cython

5
推荐指数
1
解决办法
430
查看次数

Cython - 共享Cython模块

我有cython模块base.pyx和derived.pyx.base.pyx并定义其导入定义base.pxd文件,并在derived.pyx文件中使用cimport.文件放在这里.

在我的Python应用程序中使用cython生成的共享对象时,模块正确导入,但ImportError: No module named 'base'在Cpp应用程序中使用库时总会出现错误.

我还在我的Cpp应用程序中添加了当前路径

  PyObject* path = PySys_GetObject("path");
  PyObject* result = PyObject_CallMethod(path,"append","(s)",".");
  Py_XDECREF(result);
Run Code Online (Sandbox Code Playgroud)

即使这样,应用程序也看不到cython模块.请让我知道这种路径不匹配的原因是什么.

c++ cython

5
推荐指数
1
解决办法
422
查看次数

有没有办法防止发出的 LLVM IR 删除未使用的函数?

rustc我正在尝试分析前端发出的 LLVM-IR 。该计划是针对特定语言元素发出 IR。是否有这样的元素列表和IR代码模板映射或列表?

编译器足够智能,可以删除发出的 IR 中未使用的函数:除非使用 打印到控制台println!,否则编译器将删除所有使用的函数。

这也不太有效,话虽如此,它x不会在任何地方使用,也不会在x被覆盖时使用。

let x = function();
Run Code Online (Sandbox Code Playgroud)

Rust 中是否有某种限定符,以便发出的 IR 保留所有功能?

volatile llvm rust llvm-ir

4
推荐指数
1
解决办法
909
查看次数

向量中的STL Push_back字符串

我试图在字符串向量中推送一个字符串,如下所示

void Node::set_val(string &val)
{
    this->val.push_back(val);
}
Run Code Online (Sandbox Code Playgroud)

但是,当我尝试将其称为如下

Obj.set_val("10h;");
Run Code Online (Sandbox Code Playgroud)

我得到以下错误,

error: no matching function for call to 'Node::set_val(const char [5])'
Run Code Online (Sandbox Code Playgroud)

我假设""中的字符串与stringc ++ 中的字符串相同,为什么会出现这样的错误?下面有什么要改变的?

c++ stl vector

3
推荐指数
1
解决办法
1202
查看次数

将 std::function 添加到向量 c++

我有一个包含函数指针的向量

typedef bool (*fPtr)();
vector<fPtr> AlgoDB;
Run Code Online (Sandbox Code Playgroud)

我推入向量的函数定义如下

bool SAlgos1::Algo1() {
    cout << "Executing Algo1" << endl;
    return true;
} 
Run Code Online (Sandbox Code Playgroud)

以下语句用于将函数/指针添加到向量

this->AlgoDB.push_back((fPtr) &this->Algo1);
Run Code Online (Sandbox Code Playgroud)

这是传统的 C 风格函数指针用法,我正在尝试使用std::function,其中向量和函数现在修改如下

typedef function<bool()> ffptr;
vector <ffptr> fAlgoDB;

function<bool()> SAlgos1::fAlgo1(){

    cout << "Executing FAlgo1";
    return true;
}
Run Code Online (Sandbox Code Playgroud)

但是现在每当我使用这样的语句时

this->fAlgoDB.push_back(fAlgo1);this->fAlgoDB.push_back(&fAlgo1); (类型转换也无济于事 - this->fAlgoDB.push_back((ffptr) this->fAlgo1);

我收到一个错误说明

error: taking address of temporary [-fpermissive]

error: could not convert 'true' from 'bool' to 'std::function<bool()>' (即使我并没有真正调用该函数)对于每个备用编译。

如何在向量中存储函数或函数指针?编译器试图传达什么?

pointers function vector c++11

3
推荐指数
1
解决办法
1853
查看次数

在SWIG中包装C++结构模板

我有一个C++代码,它包含一个现有的Object,概率如下:

template< typename Object > struct Roll
{
    Object object;          
    double probability; 

    Roll( Object p, double s )
        : object( p )
        , probability( s )
    { }
}
Run Code Online (Sandbox Code Playgroud)

稍后,这将在同一个.h文件中定义为:

typedef Roll< Color > RollColor;
Run Code Online (Sandbox Code Playgroud)

有关如何在SWIG中包装带有基本类型的C++结构的说明,但是这个也与模板有关,所以我不知道如何在我的接口文件中正确包装它.你知道我怎么能这样做吗?非常感谢你.

c++ swig templates struct

1
推荐指数
1
解决办法
496
查看次数

任何开源Ada(最新,2012)IDE?

我正在尝试使用Ada进行汽车编程,以利用该语言的安全关键能力.我只看到了(Libre,GNAT编程工作室)开发工具的商业许可证.

有免费的Ada IDE吗?

ide ada

1
推荐指数
1
解决办法
716
查看次数

标签 统计

c++ ×4

llvm ×3

cython ×2

rust ×2

vector ×2

ada ×1

c ×1

c++11 ×1

clang ×1

dynamic-linking ×1

function ×1

g++ ×1

ide ×1

llc ×1

llvm-ir ×1

opencv ×1

pointers ×1

shared-libraries ×1

stl ×1

struct ×1

swig ×1

templates ×1

volatile ×1