1
私は動的ライブラリを作成しています。ライブラリ内で未定義のextern変数を使用すると、macOSでリンカエラーが発生する
foo.hという
extern unsigned int myoperator;
int operate(int a, int b);
foo.cpp
#include "foo.h"
int operate(int a, int b){
switch(myoperator){
case 0:
return a+b;
case 1:
return a-b;
default:
return a*b;
}
}
libfoo
しかしながら、そのは、MacOSの打ち鳴らすにリンカーエラーをスロー、LinuxのGCCのC++ 14に非常によく構築されていますC++ 14。エラーが
Undefined symbols for architecture x86_64:
"_myoperator", referenced from:
operate(int, int) in foo.o
ld: symbol(s) not found for architecture x86_64
clang: error: linker command failed with exit code 1 (use -v to see invocation)
私はグーグルに乗った問題に最も近いリンクは、私は答えはそこにあるかどうかわからないのですhttps://developer.apple.com/library/content/documentation/DeveloperTools/Conceptual/DynamicLibraries/100-Articles/DynamicLibraryDesignGuidelines.html
です。
1. 'foo.cpp'で定義する必要があります。 2.保存されている名前 'operator'を使用しないでください。 – songyuanyao
私が使用した正確なコードではありません。私の実際のコードでは、私は 'operator'を使用しませんでした。ありがとうございました – neckTwi
@songyuanyaoもし 'foo.cpp'で定義すれば、クライアントで再定義することはできません。上記のコードはlinux gccに組み込まれています – neckTwi