- android - 多次调用 OnPrimaryClipChangedListener
- android - 无法更新 RecyclerView 中的 TextView 字段
- android.database.CursorIndexOutOfBoundsException : Index 0 requested, 光标大小为 0
- android - 使用 AppCompat 时,我们是否需要明确指定其 UI 组件(Spinner、EditText)颜色
我正在尝试将我的应用程序与 Maya C++ API 链接,但我得到:
Debug/../src/main.cpp:80: undefined reference to `MLibrary::initialize(bool, char*, bool)'
但是,nm 显示:
nm libOpenMayalib.a | grep initialize
00000000000004b0 T _ZN8MLibrary10initializeEPcb
0000000000000380 T _ZN8MLibrary10initializeEbPcb
0000000000000000 b _ZZN8MLibrary10initializeEbPcbE13isInitialized
这似乎与 MLibrary::initialize 匹配,看起来像:
class OPENMAYA_EXPORT MLibrary
{
public:
MLibrary ();
virtual ~MLibrary ();
static MStatus initialize (char* applicationName,
bool viewLicense = false);
static MStatus initialize (bool wantScriptOutput,
char* applicationName,
bool viewLicense = false);
static void cleanup( int exitStatus = 0 );
protected:
// No protected members
private:
// No private members
};
链接过程的运行方式为:
g++ -L/usr/autodesk/maya2009-x64/lib -m64 -pthread -Wl,-rpath,/usr/autodesk/maya2009-x64/lib -lOpenMayalib -l3dGraphics -lAG -lAnimEngine -lAnimSlice -lAnimUISlice -lAppVersion -lAshliFX -lAshli -lAutoCam -lawCacheShared -lawnSolver -lawxml2 -lBase -lCgGL -lCg -lCloth -lCommandEngine -lcxaguard -lDataModel -lDebug -lDeformSlice -lDeformUISlice -lDependCommand -lDependEngine -lDevices -lDynSlice -lDynUISlice -lExplorerSlice -lExtensionLayer -lfbxfilesdk -lFoundation -lgcc_s -lGeometryEngine -lguide -lhairlib -lHalf -lHumanIKShared -lHWFoundation -lHWGL -lHWRenderMaya -lHWRender -lIex -liff -lIlmImf -lImage -lImageUI -lImath -lIMFbase -limf -lirc -lJasperSlice -lKinSlice -lKinUISlice -lManips -lMaya -lmocap -lModelSlice -lModelUISlice -lModifiers -lMotionCapture -lNurbsEngine -lNurbsSlice -lNurbs -lNurbsUISlice -lOpenMayaAnim -lOpenMayaFX -lOpenMayaRender -lOpenMaya -lOpenMayaUI -lPolyEngine -lPolySlice -lPoly -lPolyUISlice -lProjectSlice -lPsdTexture -lpython2.5 -lRenderModel -lRenderSlice -lRenderUISlice -lShared -lSharedUI -lstdc++ -lstdc++ -lSubdivEngine -lSubdivGeom -lSubdiv -lSubdivUI -lsvml -ltbbmalloc -ltbb -lTranslators -lUIComponents -lUrchinSlice -lUrchinUISlice -lXm -lzlib -o"BinaryGL3MdlMayaExporter" ./src/Exporter.o ./src/Format.o ./src/Generic.o ./src/Output.o ./src/main.o -lm -lgtk-x11-2.0 -ldl -lpthread -lgdk-x11-2.0
系统是Ubuntu Maverick 10.10,64位,Maya也是64位,使用-m64编译得到相同的结果。
我发现了类似的帖子http://area.autodesk.com/forum/autodesk-maya/sdk/link-errors-when-using-the-openmaya-api-on-linux/我从他的文件中汲取了一些想法,例如使用 -Wl,-rpath,但是,这不会改变任何东西..
我还尝试安装 g++-4.1,因为它似乎是脚本中提到的,但这也没有改变任何内容(当前版本是 g++-4.4)
谢谢您的问候//约翰
最佳答案
问题在于您调用 MLibrary::initialize
的方式。
它需要一个非常量字符字符串,该字符串可能由隐式常量的文字字符字符串提供。
您所调用的类似于 lib.initialize(false, "my app", false)
,它等于 MLibrary::initialize(bool, const char*, bool)
- 此签名确实不是由 MLibrary 导出的。
要使其正常工作,您必须使用非常量的应用程序名称,例如:
// char* appName = "my app"; would be deprecated as string literals are always const
char appName[] = {'m','y',' ','a','p','p'};
lib.initialize(false, appName, false);
注意:这是一个界面错误,因为应用程序名称确实应该作为 const char*
提供 - 此错误在更高的 Maya 版本中已修复。
关于linux - 将 Maya 客户端库链接到 libOpenMayalib.a 失败,找不到 MLibrary::initialize(即使 nm 显示 libOpenMayalib.a 包含它),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4593195/
我正在尝试将我的应用程序与 Maya C++ API 链接,但我得到: Debug/../src/main.cpp:80: undefined reference to `MLibrary::init
我是一名优秀的程序员,十分优秀!