Я получаю эти не виртуальные ошибки Thunk только в сборке развертывания моего приложения. Он использует частную среду под названием Lgi. Сборка на 10.5.8 с использованием XCode 3.1.4 (последняя версия для леопарда?) Ошибка выглядит следующим образом:
Ld /Users/matthew/Code/Scribe-Branches/v2.00/build/Development/Scribe.app/Contents/MacOS/Scribe normal i386
cd /Users/matthew/Code/Scribe-Branches/v2.00
/Developer/usr/bin/g++-4.0 -arch i386 -L/Users/matthew/Code/Scribe-Branches/v2.00/build/Development -F/Users/matthew/Code/Scribe-Branches/v2.00/build/Development -F/Users/matthew/Code/Lgi/build -F/Users/matthew/Code/Scribe-Branches/v2.00/../../Lgi/build/Development -F/Users/matthew/Code/Scribe-Branches/v2.00/../../Lgi/build/Development -F/Users/matthew/Code/Scribe-Branches/v2.00/../../Lgi/build/Deployment -F/Users/matthew/Code/Scribe-Branches/v2.00/../../Lgi/build/Development -F/Users/matthew/Code/Scribe-Branches/v2.00/../../Lgi/build/Deployment -filelist /Users/matthew/Code/Scribe-Branches/v2.00/build/Scribe.build/Development/Scribe.build/Objects-normal/i386/Scribe.LinkFileList -framework Carbon -framework Lgi -o /Users/matthew/Code/Scribe-Branches/v2.00/build/Development/Scribe.app/Contents/MacOS/Scribe
Undefined symbols:
"non-virtual thunk to GWindow::OnDrop(char*, GVariant*, GdcPt2, int)", referenced from:
vtable for ScribeWndin ScribeApp.o
vtable for GShutdownin ScribeApp.o
vtable for CalendarUiin Calendar.o
vtable for CalendarViewWndin CalendarView.o
vtable for CalendarConfigin CalendarView.o
vtable for ScribeExportin Exp_Scribe.o
vtable for GNewMailDlgin GNewMailDlg.o
....etc for lots of classes....
В любом случае, я знаю, что я не оставляю эти неопределенные, потому что они действительно связывают и работают нормально в сборке разработки. Теперь, после поиска проблемы, первое, что нужно попробовать, это изменить настройку оптимизации, что я и сделал ... и не играли в кости. Некоторая ошибка ссылки.
Итак, эти виртуальные функции изначально определены в GDragDropTarget, а наследование GWindow выглядит следующим образом:
class LgiClass GWindow : public GView
#ifndef WIN32
, public GDragDropTarget
#endif
(LgiClass для __declspec экспорта / импорта на win32)
Есть идеи, что попробовать дальше?
Кстати, вот несколько примеров флагов для фреймворка:
CompileC build/Lgi.build/Deployment/Lgi.build/Objects-normal/i386/GViewCommon.o
/Users/matthew/Code/Lgi/src/common/Lgi/GViewCommon.cpp normal i386 c++
com.apple.compilers.gcc.4_0
cd /Users/matthew/Code/Lgi
/Developer/usr/bin/gcc-4.0 -x c++ -arch i386 -fmessage-length=0 -pipe -Wno-trigraphs
-fpascal-strings -fasm-blocks -Os -Wreturn-type -Wunused-variable
-isysroot /Developer/SDKs/MacOSX10.4u.sdk -fvisibility-inlines-hidden
-mmacosx-version-min=10.4
-I/Users/matthew/Code/Lgi/build/Lgi.build/Deployment/Lgi.build/Lgi.hmap
-F/Users/matthew/Code/Lgi/build/Deployment
-F/Developer/SDKs/MacOSX10.4u.sdk/System/Library/Frameworks -Iinclude/common
-Iinclude/mac -Iinclude/posix -I/Users/matthew/Code/Lgi/build/Deployment/include
-I/Users/matthew/Code/Lgi/build/Lgi.build/Deployment/Lgi.build/DerivedSources/i386
-I/Users/matthew/Code/Lgi/build/Lgi.build/Deployment/Lgi.build/DerivedSources
-DMAC
-include /var/folders/b4/b4LnxwCQGLCmwy36TH3QuU+++TQ/-Caches-/com.apple.Xcode.503/SharedPrecompiledHeaders/Lgi_Prefix-aukthgaeovjxcucuoascfyqekpzz/Lgi_Prefix.pch -c /Users/matthew/Code/Lgi/src/common/Lgi/GViewCommon.cpp
-o /Users/matthew/Code/Lgi/build/Lgi.build/Deployment/Lgi.build/Objects-normal/i386/GViewCommon.o
Ld /Users/matthew/Code/Lgi/build/Lgi.build/Deployment/Lgi.build/Objects-normal/i386/Lgi normal i386
cd /Users/matthew/Code/Lgi
setenv MACOSX_DEPLOYMENT_TARGET 10.4
/Developer/usr/bin/g++-4.0 -arch i386 -dynamiclib -isysroot /Developer/SDKs/MacOSX10.4u.sdk
-L/Users/matthew/Code/Lgi/build/Deployment
-F/Users/matthew/Code/Lgi/build/Deployment
-F/Developer/SDKs/MacOSX10.4u.sdk/System/Library/Frameworks
-filelist /Users/matthew/Code/Lgi/build/Lgi.build/Deployment/Lgi.build/Objects-normal/i386/Lgi.LinkFileList
-install_name @executable_path/../Frameworks/Lgi.framework/Versions/A/Lgi
-mmacosx-version-min=10.4 -framework Carbon
-framework SystemConfiguration -Wl,-single_module -compatibility_version 1
-current_version 1 -o /Users/matthew/Code/Lgi/build/Lgi.build/Deployment/Lgi.build/Objects-normal/i386/Lgi
А это флаги компиляции / ссылки для приложения:
CompileC build/Scribe.build/Deployment/Scribe.build/Objects-normal/ppc/IHttp.o
/Users/matthew/Code/Lgi/src/common/INet/IHttp.cpp normal ppc c++ com.apple.compilers.gcc.4_0
cd /Users/matthew/Code/Scribe-Branches/v2.00
/Developer/usr/bin/gcc-4.0 -x c++ -arch ppc -fmessage-length=0 -pipe -Wno-trigraphs
-fpascal-strings -Os -mdynamic-no-pic -DMAC -DSCRIBE_APP -isysroot /Developer/SDKs/MacOSX10.4u.sdk
-mtune=G4 -fvisibility=hidden -fvisibility-inlines-hidden -mmacosx-version-min=10.4
-I/Users/matthew/Code/Scribe-Branches/v2.00/build/Scribe.build/Deployment/Scribe.build/Scribe.hmap
-F/Users/matthew/Code/Scribe-Branches/v2.00/build/Deployment -F/Users/matthew/Code/Lgi/build
-F/Users/matthew/Code/Scribe-Branches/v2.00/../../Lgi/build/Development
-F/Users/matthew/Code/Scribe-Branches/v2.00/../../Lgi/build/Development
-F/Users/matthew/Code/Scribe-Branches/v2.00/../../Lgi/build/Deployment
-F/Users/matthew/Code/Scribe-Branches/v2.00/../../Lgi/build/Development
-F/Users/matthew/Code/Scribe-Branches/v2.00/../../Lgi/build/Deployment
-F/Users/matthew/Code/Scribe-Branches/v2.00/../../Lgi/build/Development
-F/Users/matthew/Code/Scribe-Branches/v2.00/../../Lgi/build/Deployment
-I/Users/matthew/libpng-1.2.37 -I/Users/matthew/jpeg-6b -I../../Lgi/include/common
-I../../Lgi/include/mac -I../../aspell-0.60.6/interfaces/cc
-I/Users/matthew/Code/Scribe-Branches/v2.00/build/Deployment/include
-IResources -I../Lgi/include/common -I../Lgi/include/mac
-I/Users/matthew/Code/Scribe-Branches/v2.00/build/Scribe.build/Deployment/Scribe.build/DerivedSources/ppc
-I/Users/matthew/Code/Scribe-Branches/v2.00/build/Scribe.build/Deployment/Scribe.build/DerivedSources
-DMAC
-include /var/folders/b4/b4LnxwCQGLCmwy36TH3QuU+++TQ/-Caches-/com.apple.Xcode.503/SharedPrecompiledHeaders/Scribe_Prefix-ebutivbeomfbzzguhklrzxnwuwzc/Scribe_Prefix.pch
-c /Users/matthew/Code/Lgi/src/common/INet/IHttp.cpp
-o /Users/matthew/Code/Scribe-Branches/v2.00/build/Scribe.build/Deployment/Scribe.build/Objects-normal/ppc/IHttp.o
Ld /Users/matthew/Code/Scribe-Branches/v2.00/build/Scribe.build/Deployment/Scribe.build/Objects-normal/i386/Scribe
normal i386
cd /Users/matthew/Code/Scribe-Branches/v2.00
setenv MACOSX_DEPLOYMENT_TARGET 10.4
/Developer/usr/bin/g++-4.0 -arch i386 -isysroot /Developer/SDKs/MacOSX10.4u.sdk
-L/Users/matthew/Code/Scribe-Branches/v2.00/build/Deployment
-F/Users/matthew/Code/Scribe-Branches/v2.00/build/Deployment
-F/Users/matthew/Code/Lgi/build
-F/Users/matthew/Code/Scribe-Branches/v2.00/../../Lgi/build/Development
-F/Users/matthew/Code/Scribe-Branches/v2.00/../../Lgi/build/Development
-F/Users/matthew/Code/Scribe-Branches/v2.00/../../Lgi/build/Deployment
-F/Users/matthew/Code/Scribe-Branches/v2.00/../../Lgi/build/Development
-F/Users/matthew/Code/Scribe-Branches/v2.00/../../Lgi/build/Deployment
-F/Users/matthew/Code/Scribe-Branches/v2.00/../../Lgi/build/Development
-F/Users/matthew/Code/Scribe-Branches/v2.00/../../Lgi/build/Deployment
-filelist /Users/matthew/Code/Scribe-Branches/v2.00/build/Scribe.build/Deployment/Scribe.build/Objects-normal/i386/Scribe.LinkFileList
-mmacosx-version-min=10.4 -framework Carbon -framework Lgi
-o /Users/matthew/Code/Scribe-Branches/v2.00/build/Scribe.build/Deployment/Scribe.build/Objects-normal/i386/Scribe
Undefined symbols:
"non-virtual thunk to GWindow::OnDrop(char*, GVariant*, GdcPt2, int)", referenced from:
vtable for ScribeWndin ScribeApp.o
vtable for GShutdownin ScribeApp.o
Я не уверен, что имеет значение, поэтому я разместил их все.