У меня проблема с этим кодом на C ++:
void f();
void g()
{
f();
}
f () не определена в любом месте проекта, а g () нигде не вызывается. Я использую следующие директивы cmake:
add_compile_options(-fdata-sections -ffunction-sections)
add_link_options(-Wl,--gc-sections)
Используя mingw32, компоновщик жалуется, что f () отсутствует, но это не то, чего я ожидаю, так как g () не должна быть связана в первую очередь. Используя g cc на linux, проект связывается правильно. Я подозреваю, что mingw 1st создает промежуточную библиотеку. Это подробный вывод
C:\msys64\mingw32\bin\g++.exe -g -Wl,--gc-sections -Wl,--whole-archive CMakeFiles\main.dir/objects.a -Wl,--no-whole-archive -o main.exe -Wl,--out-implib,libmain.dll.a -Wl,--major-image-version,0,--minor-image-version,0 @CMakeFiles\main.dir\linklibs.rsp
CMakeFiles\main.dir/objects.a(main.cpp.obj): In function `Z1gv':
C:/Users/Documents/Sandbox/testcmake/main.cpp:20: undefined reference to `f()'
collect2.exe: error: ld returned 1 exit status
--- EDIT ---
Я могу повторить проблему с помощью этого простого теста:
main. cpp:
void f();
void g(){
f();
}
int main(){
return 0;
}
Затем скомпилируйте с:
gcc -o main main.cpp -fdata-sections -ffunction-sections -Wl,--gc-sections
В mingw32: неопределенная ссылка на `f () '
В linux: OK