我想控制在CMake中找到/链接我的二进制文件的库的类型.最终目标是,"尽可能静态地"生成二进制文件,以便静态链接每个具有可用静态版本的库.这很重要,因为在测试期间可以在不同系统中实现二进制文件的可移植性.
ATM这似乎很难实现,因为FindXXX.cmake软件包,或者更确切地说,只要静态和动态都可用,find_library命令总是会获取动态库.
有关如何实现此功能的提示 - 最好以优雅的方式 - 非常受欢迎!
linker cmake shared-libraries static-linking dynamic-library
我正在创建一个Bash安装程序脚本,它为OSX和Linux编译和安装一些库.因为我的脚本中的一些命令("make install","apt-get install","port install"等)需要sudo,我需要用户提供密码.
目前,只要第一个sudo命令即将执行,就会要求用户输入密码,但由于这通常是在编译阶段之后,因此在启动脚本和输入密码之间总会有一段时间.
我想在脚本的开头放入密码输入+检查.另外,我很好奇这是否真的是一种安装系统库的好方法.
或者我可以在不需要sudo的本地沙箱位置安装库,但是我必须告诉apt-get和macports安装他们的库以外的默认值/ usr/local /和/ opt/local ,我不知道该怎么做,也不知道这是一个聪明的想法.
我正在尝试将MSVC中的问题与我为g ++编写的项目联系起来.这是问题所在:
我将libssh构建为静态库作为我的应用程序的一部分,在cmake中添加目标
add_library(ssh_static STATIC $ libssh_SRCS)
Libssh在C中,所以我有'extern'C"{...}'将包含在我的c ++源代码中.然后我将ssh_static目标链接到我的可执行文件sshconnectiontest
target_link_libraries(sshconnectiontest ... ssh_static ...)
这一切都适用于linux和gcc,但现在在MSVC中我得到了
error LNK2019: unresolved external symbol __imp__[function names here] referenced in [filename]
Run Code Online (Sandbox Code Playgroud)
对于我使用的每个libssh函数.
任何想法都出错了?我已经读过某个地方,imp前缀意味着链接器期望链接.dll,但这不应该是这种情况,因为ssh_static在add_library调用中被声明为静态库...
在准备一个库(让我们称之为libfoo)时,我发现自己面临以下困境:我是否将其编写为带有C包装器的C++库:
namespace Foo {
class Bar {
...
};
}
/* Separate C header. #ifdef __cplusplus omitted for brevity. */
extern "C" {
typedef void *FooBar;
FooBar* foo_bar_new() { return new Foo::Bar; }
void foo_bar_delete(FooBar *bar) { delete bar; }
}
Run Code Online (Sandbox Code Playgroud)
或者将它编写为带有C++包装器的C库更好:
/* foo/bar.h. Again, #ifdef __cplusplus stuff omitted. */
typedef struct {
/* ... */
} FooBar;
void foo_bar_init(FooBar *self) { /* ... */ }
void foo_bar_deinit(FooBar *self) { /* ... */ }
/* foo/bar.hpp */
namespace Foo { …
Run Code Online (Sandbox Code Playgroud) 以下是一个非常简单的makefile,似乎无法正常工作.
TEST=ON
buildbegin:
ifeq ($(TEST),ON)
@echo TEST PASSED
else
@echo TEST FAILED
endif
Run Code Online (Sandbox Code Playgroud)
无论我将TEST变量设置为什么,我的ifeq语句都会通过.我总是看到TEST PASSED.谁知道我在这里做错了什么?
编辑:
好.我的例子并不准确.我实际拥有的是:
SHELL = /bin/sh
DEFAULT_TARGS:= all all_debug
DEBUG_TARGS:= all_debug
ALL_TARGS:= $(DEFAULT_TARGS) $(DEBUG_TARGS)
.PHONY: $(ALL_TARGS)
.PHONY: buildbegin
$(ALL_TARGS): buildbegin
TEST=ON
$(DEBUG_TARGS): TEST=OFF
buildbegin:
@echo $(TEST)
ifeq ($(TEST),ON)
@echo PASSED
else
@echo FAILED
endif
Run Code Online (Sandbox Code Playgroud)
运行make all或make all_debug将导致打印"PASSED".如果我在条件之前回显$(TEST),看起来我的规则正在改变变量,但ifeq只能看到默认值.
我正在尝试使用Network.HTTP模块下载图像,但收效甚微.
import Network.HTTP
main = do
jpg <- get "http://www.irregularwebcomic.net/comics/irreg2557.jpg"
writeFile "irreg2557.jpg" jpg where
get url = simpleHTTP (getRequest url) >>= getResponseBody
Run Code Online (Sandbox Code Playgroud)
输出文件出现在当前目录中,但无法在chromium或ristretto下显示.Ristretto报告"解释JPEG图像文件时出错(不是JPEG文件:以0c3 0xbf开头)".
我已经更改了项目的Makefile,现在当我创建它时,它返回: -
ERROR: "make[2]: *** No rule to make target ../libvmi/driver/.deps/xen.Po. Stop. "
Makefile如何创建.Po
文件以及如何禁用为某个文件创建文件 ../libvmi/driver/.deps/xen.c
?
我正在使用GNU Emacs 23,但欢迎其他emacsen的答案作为起点.
对于版本控制下的文件,我想在条纹中显示差异标记,类似于subclipse使用的标记:
http://subclipse.tigris.org/images/workspace-ss.png
看起来这可能是通过解析输出vc-diff
和使用内置支持边缘,但我不想重新发明这个特定的轮子,除非我真的不得不.
我有XCode 4.3,我得到了令人沮丧的xml-lib相关错误.我有一种感觉,因为4.3不使用/ Developer文件夹而是/Applications/XCode.app/...错误信息如下:
Libtool /Users/dkatz/Library/Developer/Xcode/DerivedData/RWEngines-ewchevfhokeivnffrputdqapsyxu/Build/Products/Release-iphonesimulator/RWEngines.framework/Versions/A/RWEngines normal i386
cd /Users/dkatz/Sites/xCode/RWA/RWEngines
setenv MACOSX_DEPLOYMENT_TARGET 10.6
setenv PATH "/Applications/Xcode.app/Contents/Developer/Platforms/iPhoneSimulator.platform/Developer/usr/bin:/Applications/Xcode.app/Contents/Developer/usr/bin:/usr/bin:/bin:/usr/sbin:/sbin"
/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/bin/libtool -static -arch_only i386 -syslibroot /Applications/Xcode.app/Contents/Developer/Platforms/iPhoneSimulator.platform/Developer/SDKs/iPhoneSimulator5.0.sdk -L/Users/dkatz/Library/Developer/Xcode/DerivedData/RWEngines-ewchevfhokeivnffrputdqapsyxu/Build/Products/Release-iphonesimulator -filelist /Users/dkatz/Library/Developer/Xcode/DerivedData/RWEngines-ewchevfhokeivnffrputdqapsyxu/Build/Intermediates/RWEngines.build/Release-iphonesimulator/RWEngines.build/Objects-normal/i386/RWEngines.LinkFileList -ObjC -Xlinker -no_implicit_dylibs -D__IPHONE_OS_VERSION_MIN_REQUIRED=50000 -framework UIKit /Users/dkatz/Library/Developer/Xcode/DerivedData/RWEngines-ewchevfhokeivnffrputdqapsyxu/Build/Products/Release-iphonesimulator/libCorePlot-CocoaTouch.a -framework SenTestingKit -framework QuartzCore -framework Foundation -framework RWCommon -o /Users/dkatz/Library/Developer/Xcode/DerivedData/RWEngines-ewchevfhokeivnffrputdqapsyxu/Build/Products/Release-iphonesimulator/RWEngines.framework/Versions/A/RWEngines
Run Code Online (Sandbox Code Playgroud)
而实际的错误:
/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/bin/libtool失败,退出代码为1
多谢你们!