gpt4 book ai didi

c++ - 带有 Macports 的 Mac 上的 OpenSceneGraph 链接器错误

转载 作者:行者123 更新时间:2023-11-30 05:35:16 27 4
gpt4 key购买 nike

我在让 OpenSceneGraph 项目在我的 Mac 上正确链接时遇到问题。我通过 macports 安装了它,并且我已经得到了 osgviewer 和其他 osg 程序,这意味着它以某种方式被编译和链接。该代码是一个更大项目的一部分,但是我将 OSG 代码分离到最基本的部分以隔离我的问题。我首先认为这是一个 CMake 问题,所以我创建了一个 Makefile 来尝试隔离那里。这没有什么区别。

这是示例代码。

// OpenSceneGraph Libraries
#include <osg/Geode>
#include <osg/Group>
#include <osg/ShapeDrawable>
#include <osgUtil/Optimizer>
#include <osgUtil/SmoothingVisitor>
#include <osgUtil/Simplifier>
#include <osg/Node>
#include <osg/Texture1D>
#include <osg/Texture2D>
#include <osg/TexGen>
#include <osg/Material>
#include <osgViewer/Viewer>
#include <osgDB/Registry>
#include <osgDB/WriteFile>
#include <osgDB/ReadFile>
#include <osgSim/Version>
#include <osgFX/Version>
#include <osgTerrain/Version>
#include <osgVolume/Version>



// C++ Libraries
#include <iostream>
#include <string>


/**
* @brief Main Application
*/
int main( int argc, char* argv[] )
{

// Define Write Options
osgDB::Options* write_options = new osgDB::Options("WriteImageHint=IncludeData Compressor=zlib");

// Create the Root Nodes
osg::ref_ptr<osg::Group> root_node(new osg::Group());



// Write the Node File
osgDB::writeNodeFile( *root_node.get(),
"output.osgb",
write_options );

// Return
return 0;
}

这里是 Makefile 代码。我添加了比需要更多的方法,但没有效果。

OSG_LIBS=-lOpenThreads -losgDB -losg -losgUtil -losgTerrain

LIBS=-L/opt/local/lib $(OSG_LIBS)
INCL=-I/opt/local/include

CPP=clang++

foo: foo.cpp
$(CPP) foo.cpp $(LIBS) $(INCL)

这是特定命令的 VERBOSE=1 的 make 输出。

$ make VERBOSE=1
clang++ foo.cpp -L/opt/local/lib -lOpenThreads -losgDB -losg -losgUtil -losgTerrain -I/opt/local/include
Undefined symbols for architecture x86_64:
"osgDB::writeNodeFile(osg::Node const&, std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> > const&, osgDB::Options const*)", referenced from:
_main in foo-2c45f6.o
"osgDB::Options::parsePluginStringData(std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> > const&, char, char)", referenced from:
osgDB::Options::Options(std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> > const&) in foo-2c45f6.o
ld: symbol(s) not found for architecture x86_64
clang: error: linker command failed with exit code 1 (use -v to see invocation)
make: *** [foo] Error 1

我已经针对共享库运行了 otool 和其他应用程序,试图找出 undefined reference 的位置。我知道当我运行 nm 时,这两种方法的符号都在 libosgDB.dylib 中,但链接它不起作用。

我开始从源代码编译 OpenSceneGraph,但这也会自行产生编译错误。我前面还有一场漫长的战斗。非常感谢您抽出宝贵时间。

更新:

观察

  • 在编译器行重新排序库不起作用。

最佳答案

嗯,我可以重现你的问题。 MacPorts 的 OpenSceneGraph 端口链接安装的 libosgDB.dylib 似乎是针对 libstdc++ 的:

$ otool -L /opt/local/lib/libosgDB.dylib
/opt/local/lib/libosgDB.dylib:
/opt/local/lib/libosgDB.100.dylib (compatibility version 100.0.0, current version 3.2.1)
/opt/local/lib/libosgUtil.100.dylib (compatibility version 100.0.0, current version 3.2.1)
/System/Library/Frameworks/Carbon.framework/Versions/A/Carbon (compatibility version 2.0.0, current version 157.0.0)
/System/Library/Frameworks/Cocoa.framework/Versions/A/Cocoa (compatibility version 1.0.0, current version 22.0.0)
/usr/lib/libSystem.B.dylib (compatibility version 1.0.0, current version 1225.1.1)
/opt/local/lib/libz.1.dylib (compatibility version 1.0.0, current version 1.2.8)
/System/Library/Frameworks/OpenGL.framework/Versions/A/OpenGL (compatibility version 1.0.0, current version 1.0.0)
/opt/local/lib/libosg.100.dylib (compatibility version 100.0.0, current version 3.2.1)
/opt/local/lib/libOpenThreads.20.dylib (compatibility version 20.0.0, current version 3.2.1)
/usr/lib/libstdc++.6.dylib (compatibility version 7.0.0, current version 104.1.0)
/System/Library/Frameworks/CoreFoundation.framework/Versions/A/CoreFoundation (compatibility version 150.0.0, current version 1255.1.0)
/System/Library/Frameworks/CoreServices.framework/Versions/A/CoreServices (compatibility version 1.0.0, current version 728.4.0)

我认为这是 OpenSceneGraph 端口的错误。请提交工单以解决此问题。同时,在您的编译器命令行中使用 -stdlib=libstdc++ 来链接您的示例。请注意,这意味着您不能使用 C++11 功能。

关于c++ - 带有 Macports 的 Mac 上的 OpenSceneGraph 链接器错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33949208/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com