OSVR / OSVR-Core

The core libraries, applications, and plugins of the OSVR software platform.
Apache License 2.0
330 stars 124 forks source link

Link failure with jsoncpp on Mac #329

Open russell-taylor opened 8 years ago

russell-taylor commented 8 years ago

When I follow the Linux build instructions on a macbook air with the latest operating system, I get an undefined symbol error for operator = in jsoncpp. I include the output from the verbose make below. Explicitly setting the OSX architecture to x86_64 before building and installing jsoncpp does not help.

/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/bin/c++ -O2 -g -DNDEBUG -arch x86_64 -isysroot /Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.11.sdk -dynamiclib -Wl,-headerpad_max_install_names -current_version 0.6.0 -o ../../../lib/libosvrCommon.0.6.dylib -install_name @rpath/libosvrCommon.0.dylib CMakeFiles/osvrCommon.dir/AddDevice.cpp.o CMakeFiles/osvrCommon.dir/AliasProcessor.cpp.o CMakeFiles/osvrCommon.dir/BaseDevice.cpp.o CMakeFiles/osvrCommon.dir/ClientContext.cpp.o CMakeFiles/osvrCommon.dir/ClientInterfaceFactory.cpp.o CMakeFiles/osvrCommon.dir/ClientInterface.cpp.o CMakeFiles/osvrCommon.dir/Common.cpp.o CMakeFiles/osvrCommon.dir/CommonComponent.cpp.o CMakeFiles/osvrCommon.dir/CreateDevice.cpp.o CMakeFiles/osvrCommon.dir/DeviceComponent.cpp.o CMakeFiles/osvrCommon.dir/DeviceWrapper.cpp.o CMakeFiles/osvrCommon.dir/DirectionComponent.cpp.o CMakeFiles/osvrCommon.dir/EyeTrackerComponent.cpp.o CMakeFiles/osvrCommon.dir/GeneralizedTransform.cpp.o CMakeFiles/osvrCommon.dir/GetEnvironmentVariable.cpp.o CMakeFiles/osvrCommon.dir/ImagingComponent.cpp.o CMakeFiles/osvrCommon.dir/IPCRingBuffer.cpp.o CMakeFiles/osvrCommon.dir/JSONTransformVisitor.cpp.o CMakeFiles/osvrCommon.dir/Location2DComponent.cpp.o CMakeFiles/osvrCommon.dir/LocomotionComponent.cpp.o CMakeFiles/osvrCommon.dir/MessageHandler.cpp.o CMakeFiles/osvrCommon.dir/MessageRegistration.cpp.o CMakeFiles/osvrCommon.dir/NetworkClassOfService.cpp.o CMakeFiles/osvrCommon.dir/NetworkingSupport.cpp.o CMakeFiles/osvrCommon.dir/NormalizeDeviceDescriptor.cpp.o CMakeFiles/osvrCommon.dir/OriginalSource.cpp.o CMakeFiles/osvrCommon.dir/ParseAlias.cpp.o CMakeFiles/osvrCommon.dir/PathElementTools.cpp.o CMakeFiles/osvrCommon.dir/PathElementTypes.cpp.o CMakeFiles/osvrCommon.dir/PathNode.cpp.o CMakeFiles/osvrCommon.dir/PathTree.cpp.o CMakeFiles/osvrCommon.dir/PathTreeObserver.cpp.o CMakeFiles/osvrCommon.dir/PathTreeOwner.cpp.o CMakeFiles/osvrCommon.dir/PathTreeSerialization.cpp.o CMakeFiles/osvrCommon.dir/ProcessDeviceDescriptor.cpp.o CMakeFiles/osvrCommon.dir/RawMessageType.cpp.o CMakeFiles/osvrCommon.dir/RawSenderType.cpp.o CMakeFiles/osvrCommon.dir/RegisteredStringMap.cpp.o CMakeFiles/osvrCommon.dir/ResolveFullTree.cpp.o CMakeFiles/osvrCommon.dir/ResolveTreeNode.cpp.o CMakeFiles/osvrCommon.dir/RouteContainer.cpp.o CMakeFiles/osvrCommon.dir/RoutingConstants.cpp.o CMakeFiles/osvrCommon.dir/RoutingKeys.cpp.o CMakeFiles/osvrCommon.dir/SystemComponent.cpp.o CMakeFiles/osvrCommon.dir/Tracing.cpp.o /usr/local/lib/libjsoncpp.a ../../../lib/libosvrUtil.0.6.dylib ../../../bin/libvrpnserver.a ../../../bin/libquat.a -lm /opt/local/lib/libusb-1.0.dylib -framework CoreFoundation -framework IOKit ../../../bin/libvrpn_atmel.a ../../../bin/libgpsnmea.a -Wl,-rpath,/Users/taylorr/build/OSVR-Core/lib Undefined symbols for architecture x86_64: "Json::Value::operator=(Json::Value const&)", referenced from: osvr::common::createJSONAlias(std::1::basic_string<char, std::__1::char_traits, std::1::allocator > const&, Json::Value const&) in AliasProcessor.cpp.o osvr::common::convertRouteToAlias(Json::Value const&) in AliasProcessor.cpp.o osvr::common::applyPriorityToAlias(Json::Value const&, unsigned char) in AliasProcessor.cpp.o osvr::common::GeneralizedTransform::recompose(Json::Value) const in GeneralizedTransform.cpp.o std::1::vector<Json::Value, std::1::allocator >::insert(std::1::wrap_iter<Json::Value const*>, Json::Value const&) in GeneralizedTransform.cpp.o osvr::common::JSONTransformVisitor::JSONTransformVisitor(Json::Value const&) in JSONTransformVisitor.cpp.o osvr::common::appendCurrentIface(Json::Value&, Json::Value&) in NormalizeDeviceDescriptor.cpp.o ... ld: symbol(s) not found for architecture x86_64

rpavlik commented 8 years ago

Are you trying the mac build instructions? There is a Mac homebrew tap

russell-taylor commented 8 years ago

I tried doing the Homebrew approach, but Homebrew failed in the middle of fetching and building the dependencies. It failed with a permission denied and then cowardly refused to run sudo. That was as far down that path as I was willing to wander.

russell-taylor commented 8 years ago

Looks like doing chown on /usr/local got the brew flowing again. Hopefully it will get the install finished and I can try out RenderManager on the mac and then do a pull request for the generalized code.

russell-taylor commented 8 years ago

It then failed finding markdown, even though I installed macdown using brew.

russell-taylor commented 8 years ago

After making me uninstall macports so that I could use homebrew, of course...

rpavlik commented 8 years ago

oh, you were using macports... I figured somebody still was using it somewhere ;)

d235j commented 8 years ago

@russell-taylor You shouldn't have to uninstall macports, but in that case, install Homebrew into a prefix other than /usr/local.

We may want to write some Macports port files for OSVR, but I'd rather leave that to someone else if possible.

russell-taylor commented 8 years ago

Yeah, I overstated. It was more like it strongly recommended. I don't think we need Macports files. I think we're close even with the Linux compile except for the strange undefined symbol problem. With the homebrew path, it got stuck at not being able to find markdown.

rpavlik commented 8 years ago

shouldn't ever get "stuck" at not finding markdown - that's always just optional to make our readme files easier for people to read when we distribute binaries. If we have a find_package(Markdown REQUIRED) somewhere that's definitely a bug

russell-taylor commented 8 years ago

Okay, I created an issue on the Homebrew project with the build script log. Looking at it again, that seems to be the cause.

Still stuck on the standard build path by the undefined symbol. Tried a few things, but nothing got me around the issue.

d235j commented 8 years ago

It's not a Homebrew issue — it's because OSVR-Core checks the Boost version and the one provided is too new.

I will prepare a patch.