適当にC言語でhello.cを書き、
次のコマンドでC言語のファイルをLLVM IRに変換する
clang -S -emit-llvm -O3 hello.c
次のコマンドでLLVM IRからアセンブリファイルにコンパイルする
llc helloworld.ll
次でアセンブリファイルを実行ファイル(バイナリファイル)に変換
clang hello.s -o hello
ここでエラーが出た場合
これすれば変換できました
clang hello.s -no-pie -o hello
リンカに対して、PIEを生成しないよう指示します。つまり、コードは固定されたメモリアドレスで実行されることを前提とします。この形式では、実行ファイルがメモリの特定の位置にロードされる必要がありますが、アドレス空間配置ランダム化(ASLR) などのセキュリティ機能の恩恵は受けません。
実行
./hello
参考サイト
https://qiita.com/Anko_9801/items/df4475fecbddd0d91ccc