実現したいこと
- C++の関数呼び出しのリンクエラーを対処したい
前提
ここに質問の内容を詳しく書いてください。
C++でCのコンパイラを作成しているのですが、以下のfunc.cppとtest.sをコンパイルして実行ファイルtestを実行しようとするとリンクエラーで怒られてしまいます。
発生している問題・エラーメッセージ
$ g++ -c func.cpp -o func.o $ g++ -c test.s -o test.o $ g++ -o test func.o test.o /usr/bin/ld: test.o: in function `main': (.text+0x1): undefined reference to `foo' collect2: error: ld returned 1 exit status
該当のソースコード
func.cpp
1#include <stdio.h> 2 3void foo() { 4 printf("function OK!\n"); 5}
test.s
1.intel_syntax noprefix 2.globl main 3main: 4 call foo
試したこと
コンパイラのバージョンを指定してコンパイルしてみましたが、同様のエラーが出ました。
$ g++ -std=c++20 -c func.cpp -o func.o $ g++ -std=c++20 -c test.s -o test.o $ g++ -std=c++20 -o test func.o test.o /usr/bin/ld: test.o: in function `main': (.text+0x1): undefined reference to `foo' collect2: error: ld returned 1 exit status
test.sを以下のように書き換えても同様のエラーが出ました。
test.s
1.intel_syntax noprefix 2.globl main 3.extern foo 4main: 5 call foo
また、func.cpp, test.sの二つのファイルは同じディレクトリの中にあることは確認済みです。
コンパイラやリンカ周りのことはまだあまり分かっていないのでどうやって解消すれば良いのか分かりません。ご回答よろしくお願いします。
回答2件
あなたの回答
tips
プレビュー