我想在LLVM代碼中寫入讀取兩個字符串的函數,將它們連接並打印出來。打印和閱讀功能在外部庫用C寫的LLVM字符串輸入/輸出
我嘗試這樣做:
declare void @printString(i8*)
declare i8* @readString()
declare i8* @concat(i8*, i8*)
define i32 @main() {
L1:
%v2 = call i8* @readString()
%v4 = call i8* @readString()
%v5 = call i8* @concat(i8* %v2, i8* %v4)
call void @printString(i8* %v5)
%v6 = add i32 0, 0
ret i32 %v6
}
但它拋出:分段故障(核心轉儲) 我想我需要做一些bitcasting,有什麼建議?
編輯:這是我如何實現我的C函數:
void printString(char* s)
{
printf("%s\n", s);
return;
}
char* readString()
{
char* tmp;
scanf("%s", tmp);
return tmp;
}
char* concat(char* s1, char* s2)
{
char* t = malloc(strlen(s1)+strlen(s2)+1);
return strcat(strcpy(t,s1),s2);
}
你確定你的C函數能正常工作嗎? – sepp2k 2015-02-07 12:28:24
它會拋出段錯誤嗎?當你編譯你的代碼,或運行它? – arrowd 2015-02-07 16:12:43
是的,當我運行llvm代碼 – niczka 2015-02-07 22:34:54