Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/visual-studio-code/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/url/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
llvm:如何获取外部节点模块的调用图 我有一个程序考虑MyStudio.C使用一些库(用户创建的库)让MyLoo. #include "myLibrary.h"' int main() { //call some function in myLibrary lets say foo foo(); }_Llvm_Llvm Clang_Llvm Ir - Fatal编程技术网

llvm:如何获取外部节点模块的调用图 我有一个程序考虑MyStudio.C使用一些库(用户创建的库)让MyLoo. #include "myLibrary.h"' int main() { //call some function in myLibrary lets say foo foo(); }

llvm:如何获取外部节点模块的调用图 我有一个程序考虑MyStudio.C使用一些库(用户创建的库)让MyLoo. #include "myLibrary.h"' int main() { //call some function in myLibrary lets say foo foo(); },llvm,llvm-clang,llvm-ir,Llvm,Llvm Clang,Llvm Ir,现在,当我创建了一个模块过程。我正在生成调用图。 现在,在生成的调用图中,函数foo()有一个节点,如下所示: 函数“foo”的调用图节点使用=3 CS调用外部节点 现在,我想要在 “我的图书馆” 可能吗?我可以通过myProgram.c中函数foo的调用图节点获取myLibrary的调用图吗?我尝试了以下步骤,并且能够从调用图获取所有函数 首先,我的_程序.c看起来像 #include "my_library.h" int main() { foo(); } 我的图书馆是 #incl

现在,当我创建了一个模块过程。我正在生成调用图。 现在,在生成的调用图中,函数foo()有一个节点,如下所示:

函数“foo”的调用图节点使用=3 CS调用外部节点

现在,我想要在 “我的图书馆”


可能吗?我可以通过myProgram.c中函数foo的调用图节点获取myLibrary的调用图吗?

我尝试了以下步骤,并且能够从调用图获取所有函数

首先,我的_程序.c看起来像

#include "my_library.h"
int main()
{
    foo();
}
我的图书馆是

#include "my_library.h"
void boo() {}

void foo()
{
    boo();
}

clang++ my_program.c -c -emit-llvm
clang++ my_library.c -c -emit-llvm
llvm-link my_program.bc my_library.bc -o linked.bc
然后,我使用了一个定制的ModulePass来遍历调用图。为了获取调用图,ModulePass使用llvm CallGraphHwraperPass


如果我使用clang而不是clang++,CallGraph不会捕获主要的调用foo,这很奇怪,但我对此没有任何解释。

我通过以下步骤尝试了这一点,并且能够从调用图中获取所有函数

首先,我的_程序.c看起来像

#include "my_library.h"
int main()
{
    foo();
}
我的图书馆是

#include "my_library.h"
void boo() {}

void foo()
{
    boo();
}

clang++ my_program.c -c -emit-llvm
clang++ my_library.c -c -emit-llvm
llvm-link my_program.bc my_library.bc -o linked.bc
然后,我使用了一个定制的ModulePass来遍历调用图。为了获取调用图,ModulePass使用llvm CallGraphHwraperPass


如果我使用clang而不是clang++,调用图就不会捕获主要的调用foo,这很奇怪,但我对此没有任何解释。

不知道在没有
mylibrary.c
mylibrary.ll
的情况下是否可以这样做。如果查看
myProgram.ll
函数
foo
仅具有外部全局声明。在您的场景中,库是否以二进制形式链接到?myLibrary是用户创建的库,即我有库的源代码。我可以用我想要的任何方式编译和链接它。在本例中,我首先编译了库,然后编译了代码并尝试进行静态链接。不确定在没有
mylibrary.c
mylibrary.ll
的情况下是否可以进行静态链接。如果查看
myProgram.ll
函数
foo
仅具有外部全局声明。在您的场景中,库是否以二进制形式链接到?myLibrary是用户创建的库,即我有库的源代码。我可以用我想要的任何方式编译和链接它。在本例中,我首先编译了库,然后编译了代码并尝试进行静态链接。实际上,我解决了问题,忘记了更新。对于叮当声,我用以下方法来做。1) clang my_program.c-S-emit llvm-o my_program.ll 2)clang my_library.c-S-emit llvm-o my_library.ll 3)llvm link my_program.ll-o linked.ll-实际上我解决了问题,忘记了更新。对于叮当声,我用以下方法来做。1) clang my_program.c-S-emit llvm-o my_program.ll 2)clang my_library.c-S-emit llvm-o my_library.ll 3)llvm link my_program.ll-o linked.ll-S