我在 OSX 10.9 上使用 XCode 5.0.1,我正在链接 libc++(LLVM C++ 标准库)和有效架构 armv7; armv7s 和两者。
1º 我使用 Cmake 创建了一个使用 OpenCV2.framework + foo 的项目,使用 foo.a 创建了一个 XCode 项目。我的可执行文件链接 OpenCV2.framework + foo.a 并完美运行,编译和链接。
2º 我使用 Ogre 的模板创建了另一个项目。该项目运行完美。
3º 然后,我尝试将 foo.a 添加到新项目中,以制作与我的可执行文件在步骤 1 中使用的相同的东西。
那么,如果库在另一个项目中工作,并且函数在里面,为什么会出现链接问题?
我编译这个示例的 CmakeList 是:
# /////////////////////////////////////////////////////////
# //SAMPLE
# /////////////////////////////////////////////////////////
# 3rdParty (OGRE LOCATION)
set(OGRE_SDK_ROOT /Users/vgoni/Librerias/ogre1.9-pre/OgreSDK/ CACHE PATH "Ogre SDK ROOT")
set(OGRE_DEPENDENCIES_DIR ${OGRE_SDK_ROOT}/iOSDependencies CACHE PATH "Ogre SDK DEP")
# Set up project
SET(PROJ_NAME ogreIOS)
PROJECT( ${PROJ_NAME} )
SET(PRODUCT_NAME ${PROJ_NAME})
SET(EXECUTABLE_NAME ${PROJ_NAME}Executable)
# Add variable to generate iphone project in ADD_EXECUTABLE
SET(APP_TYPE MACOSX_BUNDLE)
# Headers
SET(${PROJ_NAME}_HEADERS
include/OgreStaticPluginLoader.h
include/OgreDemoApp.h
include/OgreFramework.h
include/AppDelegate.h
)
# Source
SET(${PROJ_NAME}_SRC
src/OgreFramework.cpp
src/OgreDemoApp.cpp
src/main.mm
)
# Add there files to Resources package into XCODE
SET_SOURCE_FILES_PROPERTIES(
resources/ogre.cfg
resources/plugins.cfg
resources/resources.cfg
resources/ogreiosSample-Info.plist
resources/ogreiosSample-Prefix.pch
resources/en.lproj/InfoPlist.strings
PROPERTIES
MACOSX_PACKAGE_LOCATION Resources
)
# Include self directories
INCLUDE_DIRECTORIES( include )
# Include OGRE headers needed
INCLUDE_DIRECTORIES( ${OGRE_SDK_ROOT}/include )
INCLUDE_DIRECTORIES( ${OGRE_SDK_ROOT}/include/OIS )
INCLUDE_DIRECTORIES( ${OGRE_SDK_ROOT}/include/OGRE )
INCLUDE_DIRECTORIES( ${OGRE_SDK_ROOT}/include/OGRE/Overlay )
INCLUDE_DIRECTORIES( ${OGRE_SDK_ROOT}/include/OGRE/iOS )
INCLUDE_DIRECTORIES( ${OGRE_SDK_ROOT}/include/OGRE/RTShaderSystem )
INCLUDE_DIRECTORIES( ${OGRE_SDK_ROOT}/include/OGRE/RenderSystems/GLES2 )
INCLUDE_DIRECTORIES( ${OGRE_SDK_ROOT}/iOSDependencies/include )
# Link Directories where libraries needed are
LINK_DIRECTORIES( ${OGRE_SDK_ROOT}/lib/Release )
LINK_DIRECTORIES( ${OGRE_SDK_ROOT}/iOSDependencies/lib )
LINK_DIRECTORIES( ${OGRE_SDK_ROOT}/iOSDependencies/lib/Release )
# Add ogre & boots libraries flags
SET (CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -lmesaglsl2 -lboost_system -lboost_chrono -lboost_date_time -lboost_thread -lFreeType -lFreeImage -lzzip -lz -lc++ -lforce_load -lfoo")
# foo is my library, force to load all to avoid fail in linking
# 3rdParty ogre libraries
SET(OGRE_LIBS OIS OgreMainStatic RenderSystem_GLES2Static OgreRTShaderSystemStatic )
# Link the libraries needed
#TARGET_LINK_LIBRARIES (${PROJ_NAME} ${OGRE_LIBS})
# Create executable for iOS
ADD_EXECUTABLE(
${EXECUTABLE_NAME}
${APP_TYPE}
${${PROJ_NAME}_HEADERS}
${${PROJ_NAME}_SRC}
)
# Adding info to XCode project
#set_target_properties(${EXECUTABLE_NAME} PROPERTIES
#MACOSX_BUNDLE_INFO_PLIST ${CMAKE_CURRENT_SOURCE_DIR}/resources/Info.plist)
# Change name to make work Macros
SET(PROJ_NAME ogreIOSExecutable)
# Macro to add frameworks to Sample Executable
link_ios_framework(AssetsLibrary ${EXECUTABLE_NAME})
link_ios_framework(AVFoundation ${EXECUTABLE_NAME})
link_ios_framework(CoreMedia ${EXECUTABLE_NAME})
link_ios_framework(CoreGraphics ${EXECUTABLE_NAME})
link_ios_framework(CoreVideo ${EXECUTABLE_NAME})
link_ios_framework(ImageIO ${EXECUTABLE_NAME})
link_ios_framework(Foundation ${EXECUTABLE_NAME})
link_ios_framework(OpenGLES ${EXECUTABLE_NAME})
link_ios_framework(QuartzCore ${EXECUTABLE_NAME})
link_ios_framework(UIKit ${EXECUTABLE_NAME})
# Needed dependencies
link_ios_sdk(libc++.1.dylib ${EXECUTABLE_NAME})
link_ios_sdk(libz.dylib ${EXECUTABLE_NAME})
#Add OpenCV Libraries to link
TARGET_LINK_LIBRARIES (${PROJ_NAME} ${OpenCV_LIBS})
LINK_DIRECTORIES(
${LIBRARY_OUTPUT_PATH}
)
最佳答案
您必须为每个要添加所有函数链接的库添加一次标志 -ObjC 和 -force_load,避免因未添加函数而导致失败。
例如,您必须更改添加到 lib boost_system 的 cpp 标志,因为这会导致链接器问题:
SET (CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -lmesaglsl2 -force_load -lboost_system -lboost_chrono -lboost_date_time -lboost_thread -lFreeType -lFreeImage -lzzip -lz -lc++ -lforce_load -lfoo")
并为您需要的每个库应用此标志。
关于iOS 静态库不链接 XCODE 5 iOS 7,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19659313/
我实际上是在尝试使用RVM在我的OSX10.7.5上更新ruby,并在输入以下命令后:rvminstallruby我得到了以下回复:Searchingforbinaryrubies,thismighttakesometime.Checkingrequirementsforosx.Installingrequirementsforosx.Updatingsystem.......Errorrunning'requirements_osx_brew_update_systemruby-2.0.0-p247',pleaseread/Users/username/.rvm/log/138121
这里有一个很好的答案解释了如何在Ruby中下载文件而不将其加载到内存中:https://stackoverflow.com/a/29743394/4852737require'open-uri'download=open('http://example.com/image.png')IO.copy_stream(download,'~/image.png')我如何验证下载文件的IO.copy_stream调用是否真的成功——这意味着下载的文件与我打算下载的文件完全相同,而不是下载一半的损坏文件?documentation说IO.copy_stream返回它复制的字节数,但是当我还没有下
我正在使用Rails构建一个简单的聊天应用程序。当用户输入url时,我希望将其输出为html链接(即“url”)。我想知道在Ruby中是否有任何库或众所周知的方法可以做到这一点。如果没有,我有一些不错的正则表达式示例代码可以使用... 最佳答案 查看auto_linkRails提供的辅助方法。这会将所有URL和电子邮件地址变成可点击的链接(htmlanchor标记)。这是文档中的代码示例。auto_link("Gotohttp://www.rubyonrails.organdsayhellotodavid@loudthinking.
我正在尝试解析一个文本文件,该文件每行包含可变数量的单词和数字,如下所示:foo4.500bar3.001.33foobar如何读取由空格而不是换行符分隔的文件?有什么方法可以设置File("file.txt").foreach方法以使用空格而不是换行符作为分隔符? 最佳答案 接受的答案将slurp文件,这可能是大文本文件的问题。更好的解决方案是IO.foreach.它是惯用的,将按字符流式传输文件:File.foreach(filename,""){|string|putsstring}包含“thisisanexample”结果的
我正在尝试用Prawn生成PDF。在我的PDF模板中,我有带单元格的表格。在其中一个单元格中,我有一个电子邮件地址:cell_email=pdf.make_cell(:content=>booking.user_email,:border_width=>0)我想让电子邮件链接到“mailto”链接。我知道我可以这样链接:pdf.formatted_text([{:text=>booking.user_email,:link=>"mailto:#{booking.user_email}"}])但是将这两行组合起来(将格式化文本作为内容)不起作用:cell_email=pdf.make_c
1.错误信息:Errorresponsefromdaemon:Gethttps://registry-1.docker.io/v2/:net/http:requestcanceledwhilewaitingforconnection(Client.Timeoutexceededwhileawaitingheaders)或者:Errorresponsefromdaemon:Gethttps://registry-1.docker.io/v2/:net/http:TLShandshaketimeout2.报错原因:docker使用的镜像网址默认为国外,下载容易超时,需要修改成国内镜像地址(首先阿里
print"Enteryourpassword:"pass=STDIN.noecho(&:gets)puts"Yourpasswordis#{pass}!"输出:Enteryourpassword:input.rb:2:in`':undefinedmethod`noecho'for#>(NoMethodError) 最佳答案 一开始require'io/console'后来的Ruby1.9.3 关于ruby-为什么不能使用类IO的实例方法noecho?,我们在StackOverflow上
我有一个未排序的链接列表,我将其保存在旁边,我想单击每个链接并确保它转到真实页面而不是404、500等。问题是我不知道该怎么做。是否有一些我可以检查的对象会给我http状态代码或任何东西?mylinks=Browser.ul(:id,'my_ul_id').linksmylinks.eachdo|link|link.click#needtocheckfora200statusorsomethinghere!how?Browser.backend 最佳答案 我的回答与铁皮人的想法类似。require'net/http'require'
我一直在玩一个脚本,它在Chrome中获取选定的文本并在Google中查找它,提供四个最佳选择,然后粘贴相关链接。它以不同的格式粘贴,具体取决于当前在Chrome中打开的页面-DokuWiki打开的DokuWiki格式,普通网站的HTML,我想要我的WordPress所见即所得编辑器的富文本。我尝试使用pbpaste-Preferrtf来查看没有其他样式的富文本链接在粘贴板上的样子,但它仍然输出纯文本。在文本编辑中保存文件并进行试验后,我想出了以下内容text=%q|{\rtf1{\field{\*\fldinst{HYPERLINK"URL"}}{\fldrsltTEXT}}}|te
基本上,我试图在用户单击链接(或按钮或某种类型的交互元素)时执行Rails方法。我试着把它放在View中:但这似乎没有用。它最终只是在用户甚至没有点击“添加”链接的情况下调用该函数。我也用link_to试过了,但也没用。我开始认为没有一种干净的方法可以做到这一点。无论如何,感谢您的帮助。附言。我在ApplicationController中定义了该方法,它是一个辅助方法。 最佳答案 View和Controller是相互独立的。为了使链接在Controller内执行函数调用,您需要对应用程序中的端点执行ajax调用。该路由应调用rub