当前位置:首页 » 编程软件 » iosc静态库编译

iosc静态库编译

发布时间: 2022-05-16 10:12:38

⑴ 如何使用静态库编译动态库

第一步,我先从简单的调用出发,定义了一个简单的函数,该函数仅仅实现一个整数加法求和:

LIBEXPORT_API int mySum(int a,int b){ return a+b;}
C# 导入定义:

public class RefComm
{
[DllImport("LibEncrypt.dll",
EntryPoint=" mySum ",
CharSet=CharSet.Auto,CallingConvention=CallingConvention.StdCall)]
public static extern int mySum (int a,int b);
}
在C#中调用测试:

int iSum = RefComm.mySum(,);

运行查看结果iSum为5,调用正确。第一步试验完成,说明在C#中能够调用自定义的动态链接库函数。

第二步,我定义了字符串操作的函数(简单起见,还是采用前面的函数名),返回结果为字符串:

LIBEXPORT_API char *mySum(char *a,char *b){sprintf(b,"%s",a); return a;}
C# 导入定义:

public class RefComm
{
[DllImport("LibEncrypt.dll",
EntryPoint=" mySum ",
CharSet=CharSet.Auto,
CallingConvention=CallingConvention.StdCall)]
public static extern string mySum (string a, string b);
}
在C#中调用测试:

string strDest="";
string strTmp= RefComm.mySum("45", strDest);

运行查看结果 strTmp 为"45",但是strDest为空。我修改动态链接库实现,返回结果为串b:

LIBEXPORT_API char *mySum(char *a,char *b){sprintf(b,"%s",a) return b;}
修改 C# 导入定义,将串b修改为ref方式:

public class RefComm
{
[DllImport("LibEncrypt.dll",
EntryPoint=" mySum ",
CharSet=CharSet.Auto,CallingConvention=CallingConvention.StdCall)]
public static extern string mySum (string a, ref string b);
}
在C#中再调用测试:

string strDest="";
string strTmp= RefComm.mySum("45", ref strDest);
运行查看结果 strTmp 和 strDest 均不对,含不可见字符。再修改 C# 导入定义,将CharSet从Auto修改为Ansi:

public class RefComm
{
[DllImport("LibEncrypt.dll",
EntryPoint=" mySum ",
CharSet=CharSet.Ansi,CallingConvention=CallingConvention.StdCall)]
public static extern string mySum (string a, string b);
}
在C#中再调用测试:

string strDest="";
string strTmp= RefComm. mySum("45", ref strDest);
运行查看结果 strTmp 为"45",但是串 strDest 没有赋值。第二步实现函数返回串,但是在函数出口参数中没能进行输出。再次修改 C# 导入定义,将串b修改为引用(ref):

public class RefComm
{
[DllImport("LibEncrypt.dll",
EntryPoint=" mySum ",
CharSet=CharSet.Ansi,CallingConvention=CallingConvention.StdCall)]
public static extern string mySum (string a, ref string b);
}

运行时调用失败,不能继续执行。

第三步,修改动态链接库实现,将b修改为双重指针:

LIBEXPORT_API char *mySum(char *a,char **b){sprintf((*b),"%s",a); return *b;}
C#导入定义:

public class RefComm
{
[DllImport("LibEncrypt.dll",
EntryPoint=" mySum ",
CharSet=CharSet.Ansi,CallingConvention=CallingConvention.StdCall)]
public static extern string mySum (string a, ref string b);
}
在C#中调用测试:

string strDest="";
string strTmp= RefComm. mySum("45", ref strDest);

运行查看结果 strTmp 和 strDest 均为"45",调用正确。第三步实现了函数出口参数正确输出结果。

第四步,修改动态链接库实现,实现整数参数的输出:

LIBEXPORT_API int mySum(int a,int b,int *c){ *c=a+b; return *c;}
C#导入的定义:

public class RefComm
{
[DllImport("LibEncrypt.dll",
EntryPoint=" mySum ",
CharSet=CharSet.Ansi,CallingConvention=CallingConvention.StdCall)]
public static extern int mySum (int a, int b,ref int c);
}
在C#中调用测试:

int c=0;
int iSum= RefComm. mySum(,, ref c);

运行查看结果iSum 和c均为5,调用正确。

经过以上几个步骤的试验,基本掌握了如何定义动态库函数以及如何在 C# 定义导入,有此基础,很快我实现了变长加密函数在 C# 中的调用,至此目标实现。

三、结论

在 C# 中调用 C++ 编写的动态链接库函数,如果需要出口参数输出,则需要使用指针,对于字符串,则需要使用双重指针,对于 C# 的导入定义,则需要使用引用(ref)定义。

对于函数返回值,C# 导入定义和 C++ 动态库函数声明定义需要保持一致,否则会出现函数调用失败。定义导入时,一定注意 CharSet 和 CallingConvention 参数,否则导致调用失败或结果异常。运行时,动态链接库放在 C# 程序的目录下即可,我这里是一个 C# 的动态链接库,两个动态链接库就在同一个目录下运行。

⑵ xcode 几个文件怎么编译静态库

XCode项目中添加静态库的方法:
1、右击target,选择add
->
new
target
2、在弹出的
NewTarget
界面中选择Cocoa
Touch
->
Static
Library
,为新
library
取个名字。
将源文件添加到这个库。可以直接拖动现存源文件,也可以右击
->
add
。注意选择新建的库为添加的
target

3、设置原项目,令其使用新建的库。
4、右击原项目的
target
,选择
getInfo

5、选择
General
选项卡。
6、向
linked
libraries
中添加新创建的库
(即添加
.a
文件)。

⑶ xcode 如何编译

Xcode 常用编译选项设置
在xcconfig文件中指定即可。
用标准库连接
LINK_WITH_STANDARD_LIBRARIES = YES如果激活此设置,那么编译器在链接过程中会自动使用通过标准库的链接器。
Info.plist 输出编码
INFOPLIST_OUTPUT_FORMAT = binary指定Info.plist文件的输出编码(默认情况下,输出与输入的编码保持不变),这个输出编码能指定“binary”或者“XML”。
生 成调试符号GCC_GENERATE_DEBUGGING_SYMBOLS = NO当启用的时候,详情等级能够通过build的’Level of Debug Symbols’设置去控制。 隐藏内联方法GCC_INLINES_ARE_PRIVATE_EXTERN = YES Objective-C GCGCC_ENABLE_OBJC_GC = Unsupported 优化级别GCC_OPTIMIZATION_LEVEL = Fastest, Smallest [-OS]
None: 不做优化使用这个设置,编译器的目标是减少编译成本,使调试产生预期的结果。
Fast:优化编译将为大函数占用更多的时间和内存使用这个设置,编译器将尝试减少代码的大小和执行时间,不进行任何优化,需要大量编译时间。
Faster:编译器执行几乎所有支持的优化,它不考虑空间和速度之间的平衡与“Fast”设置相比,该设置会增加编译时间和生成代码的性能。编译器不进行循环展开、内联函数和寄存器变量的重命名。
Fastest:开启“Faster”支持的所有的优化,同时也开启内联函数和寄存器变量的重命名选项
Fastest,smallest:优化代码大小这个设置启用“Faster”所有的优化,一般不增加代码大小,它还执行旨在减小代码大小的进一步优化。
C 语言方言GCC_C_LANGUAGE_STANDARD = C89 警告 检查Switch语句GCC_WARN_CHECK_SWITCH_STATEMENTS = YES 隐藏局部变量GCC_WARN_SHADOW = YES 隐式转换成32位的类型GCC_WARN_64_TO_32_BIT_CONVERSION = YES 未完成的Objective-C协议GCC_WARN_ALLOW_INCOMPLETE_PROTOCOL = YES 抑制所有的警告GCC_WARN_INHIBIT_ALL_WARNINGS = NO 初始化时没有完整的括号GCC_WARN_INITIALIZER_NOT_FULLY_BRACKETED = YES例子(a没有完全的括号,b有):
int a[ 2 ][ 2 ] = { 0, 1, 2, 3 };
int b[ 2 ][ 2 ] = { { 0, 1 }, { 2, 3 } };
不匹配的返回类型
GCC_WARN_ABOUT_RETURN_TYPE = YES 缺少括号GCC_WARN_MISSING_PARENTHESES = YES例子:
{
if( a )
if( b )
foo();
else
bar();
}
{
if( a )
{
if( b )
foo();
else
bar();
}
}
在结构体初始化时缺少字段
GCC_WARN_ABOUT_MISSING_FIELD_INITIALIZERS = YES
缺 少函数原型GCC_WARN_ABOUT_MISSING_PROTOTYPES = YES 在文件结尾缺少新行GCC_WARN_ABOUT_MISSING_NEWLINE = YES 选择了多个定义的类型(@Selector)GCC_WARN_MULTIPLE_DEFINITION_TYPES_FOR_SELECTOR = NO 严格的Selector匹配GCC_WARN_STRICT_SELECTOR_MATCH = YES 把缺少函数原型当作错误GCC_TREAT_IMPLICIT_FUNCTION_DECLARATIONS_AS_ERRORS = YES 把所有的警告当作错误GCC_TREAT_WARNINGS_AS_ERRORS = YES 未定义的SelectorGCC_WARN_UNDECLARED_SELECTOR = YES 未初始化的自动变量GCC_WARN_UNINITIALIZED_AUTOS = YES 未知的Pragma指令GCC_WARN_UNKNOWN_PRAGMAS = YES 未使用的函数GCC_WARN_UNUSED_FUNCTION = YES 未使用的标签GCC_WARN_UNUSED_LABEL = YES 未使用的参数GCC_WARN_UNUSED_PARAMETER = YES 未使用的值GCC_WARN_UNUSED_VALUE = YES当一个语句计算的结果显式的未使用的时候发出警告 未使用的变量GCC_WARN_UNUSED_VARIABLE = YES 警告-所有过时的函数GCC_WARN_ABOUT_DEPRECATED_FUNCTIONS = YES offsetof宏未定义使用的警告GCC_WARN_ABOUT_INVALID_OFFSETOF_MACRO = YES
iphone 常用的<app>-info.plist设置
Application requires iPhone environment如 果应用程序不能在ipod touch上运行,设置此项为true;
Application uses Wi-Fi如果应用程序需要wi-fi才能工作,应该将此属性设置为true。这么做会提示用户,如果没有打开wi-fi的话,打开wi-fi。为了节省 电力,iphone会在30分钟后自动关闭应用程序中的任何wi-fi。设置这一个属性可以防止这种情况的发生,并且保持连接处于活动状态
Bundle display name这用于设置应用程序的名称,它显示在iphone屏幕的图标下方。应用程序名称限制在10-12个字符,如果超出,iphone将缩写名 称。
Bundle identifier这个为应用程序在iphone developer program portal web站点上设置的唯一标识符。(就是你安装证书的时候,需要把这里对应修改)。
Bundle version这个会设置应用程序版本号,每次部署应用程序的一个新版本时,将会增加这个编号,在app store用的。
Icon already includes gloss and bevel effects默认情况下,应用程序被设置了玻璃效果,把这个设置为true可以阻止这么做。
Icon file(这个不用多说了)设置应用程序图标的。
Main nib file base name应用程序首次启动时载入的xib文件 这个基本用不到。
Initial interface orientation 确定了应用程序以风景模式还是任务模式启动
Localizations多语言。应用程序本地化的一列表,期间用逗号隔开,例如 应用程序支持英语 日语,将会适用 English,Japanese. Status bar is initially hidden 设置是否隐藏状态栏。你懂的。
Status bar style选择三种不同格式种的一种。
URL types应用程序支持的url标识符的一个数组。
用URL Scheme进行程序跳转
打开info.plist,添加一项URL types
展开URL types,再展开Item1,将Item1下的URL identifier修改为URL Scheme
展开URL Scheme,将Item1的内容修改为myapp
其他程序可通过myapp://访问此自定义URL
参考:http://iphonedevelopertips.com/cocoa/launching-your-own-application-via-a-custom-url-scheme.html
IOS后台播放音乐
OS后台播放只是在IOS4.0以后的版本支持。
1,设置后台播放会话
AVAudioSession *session = [AVAudioSession sharedInstance];
[session setActive:YES error:nil];
[session setCategory: error:nil];
2,在info.plist里面添加
<key>UIBackgroundModes</key>
<array>
<string>audio</string>
</array>
静态库没法包含category/分类?
如果你导入一个objc静态库,发现很多objc的category 不能调用,可以尝试在主工程中加入linker选项:
-all_load 加入这个一般就够了
-ObjC
让程序最小化再开启时,从头开始:
按下 “Home” 键以后程序可能并没有退出而是转入了后台运行。如果您想让应用直接退出,最简单的方法是:在 info-plist 里面找到 Application does not run in background 一项,勾选即可。
程序退出后任务栏还是有图标,但是程序原来的所有运行状态全部丢失,点击任务栏图标也不过相当于再次启动程序;如果允许后台运行,点击任务栏图标后会恢复程序中断时的界面。
本地化字符串:
在infoPlist.strings里面写
“string1″=”水果”
代码里面写 myLabel.text = NSLocalizedString(@”string1″, nil);
本地化的Bundle display name:
1)创建一个空文件,取名为InfoPlist.strings
2)对InfoPlist.strings进行本地化(Get Info -> Make Localization),然后设置需要的语言(如中文zh)
3)编辑不同的InfoPlist.strings文件,设置显示名字
CFBundleDisplayName = “名字”;
4)(这步不做貌似也可以)编辑Info.plist,添加一个新的属性Application has localized display name, 设置其类型为boolean,并将其value设置为选中状态
default图片的衔接问题:
程序开始后,手动加载default图片,然后进行过渡效果即可。
遍历目录:
NSString *appDocDir = [[[[NSFileManager defaultManager] URLsForDirectory:NSDocumentDirectory inDomains:NSUserDomainMask] lastObject] relativePath];NSArray *contentOfFolder = [[NSFileManager defaultManager] contentsOfDirectoryAtPath:appDocDir error:NULL];for (NSString *aPath in contentOfFolder) { NSLog(@"apath: %@", aPath); NSString * fullPath = [appDocDir :aPath]; BOOL isDir; if ([[NSFileManager defaultManager] fileExistsAtPath:fullPath isDirectory:&isDir] && !isDir) { [fileList addObject:aPath]; }}
IB:
不论写不写property的retain,由IBOutlet都会为对象加一个retainCount,所以只要连接了,就需要在viewDidUnload与dealloc中release并适当置为nil。
预先在IB里面加载好的文件(比如图片),即使释放了Controller,IB中的文件也不会被释放,直至内存警告,解决办法是较大的资源用代码加载。
UIWebView:
用代码加载UIWebView的内容,navigationType是UIWebViewNavigationTypeOther
CAAnimation:
一定要记得[self.view.layer removeAllAnimations];因为CAAnimation会retain它的delegate
设备型号识别,可通过审核:
+ (NSString*)getDeviceVersion{ size_t size; sysctlbyname("hw.machine", NULL, &size, NULL, 0); char *machine = (char*)malloc(size); sysctlbyname("hw.machine", machine, &size, NULL, 0); NSString *platform = [NSString stringWithCString:machine encoding:NSUTF8StringEncoding]; free(machine); return platform;}
输出:
//@”iPad1,1″
//@”iPad2,1″
//@”i386″
逗号后面数字解释:(i386是指模拟器)
1-WiFi版
2-GSM/WCDMA 3G版
3-CDMA版
AppleTV(2G) (AppleTV2,1)
iPad (iPad1,1)
iPad2,1 (iPad2,1)Wifi版
iPad2,2 (iPad2,2)GSM3G版
iPad2,3 (iPad2,3)CDMA3G版
iPhone (iPhone1,1)
iPhone3G (iPhone1,2)
iPhone3GS (iPhone2,1)
iPhone4 (iPhone3,1)
iPhone4(vz) (iPhone3,3)iPhone4 CDMA版
iPhone4S (iPhone4,1)
iPodTouch(1G) (iPod1,1)
iPodTouch(2G) (iPod2,1)
iPodTouch(3G) (iPod3,1)
iPodTouch(4G) (iPod4,1)
判断ipad/iphone
12UI_USER_INTERFACE_IDIOM() == UIUserInterfaceIdiomPadUI_USER_INTERFACE_IDIOM() == UIUserInterfaceIdiomPhone
或者
1[[[UIDevice currentDevice] model] isEqualToString:@"iPad"];
判断设备是否有摄像头
1[UIImagePickerController isSourceTypeAvailable:];

⑷ 如何在Xcode中创建C++静态库

1. 运行Xcode,选择“Create a new Xcode project"
2. 依次选择“iOS”->“Framework & Library”->“Cocoa Touch Static Library”
3. 在“Proct Name”中输入产品名称
4. 选择一个目录进行保存,然后点击“Create”
5. 添加源代码,右键点击项目,在展开的右键菜单中选择“Add Files to..."
6. 选择指定的目录,请务必勾选“Create Groups”
7. 将红框标注的地方改成“iOS Device”,这样我们可以编译一个真机的静态库将红框标注的地方改成任一模拟器,如“iPhone 6”,就能编译一个模拟器用的静态库
8. 展开“Procts”菜单,点击“Build”进行编译
9. 按住Comand + B进行编译
10. 编译成功后,展开“Procts”节点,右键选择刚刚生成的静态库“libmecli.a”,在右键菜单中选择“Show in Finder”可以找到该静态库文件

⑸ 如何编译生成和调用静态库

如何编译动态库
gcc test1.c test2.c -shared -fPIC -o libtest.so
使用动态库
gcc main.c -L. -ltest -o a.out
(
-L : 表示需要库的路径
-l:表示需要库的名称,如libtest.so,名称则为test
)
(ps:执行a.out时有可能提示找不到libtest.so文件,这时需要把库文件放入到/lib等目录下,或者添加环境变量LD_LIBRARY_PATH,包含有库文件的路径即可)

如何编译静态库
gcc -c test1.c test2.c
ar -r libtest.a test1.o test2.o
使用静态库
gcc main.c -static -L. -ltest -o a.out

-static:可强制编译时使用静态库,如果不使用这个参数,而静态库与动态库同名的话,会优先使用动态库

⑹ C/C++编译问题,静态库,动态库。

的dll一起拷贝到别人电脑上去!

还有一些特别的情况,虽然是针对VC2005的,但是对VC6也有参考价值。
前面一些是我在网上找的,后面的有些是我自己现添加的,希望对你有帮助!

报错"由于应用程序配置不正确,应用程序未能启动.重新安装应用程序可能会纠正这个问题"

//------------------------------------------------------

这个问题主要出现在XP环境下运行由Visual C++2003/2005编译的MFC程序时
问题现象是XP运行此类程序时,报错"由于应用程序配置不正确,应用程序未能启动.重新安装应用程序可能会纠正这个问题"
这个问题似乎许多人遇见过.在CSDN和微软社区里面都有人提到.但是没有完整的解决方案
这个问题的解决一共会遇见2个子问题

最早出现这个错误我和许多人认为的一样
认为是缺乏DLL库文件导致.但是在测试机复制了DLL甚至安装了.net framework 2.0以后
都无法解决问题,最后确认不是由缺乏DLL所致
因为程序是纯win32的应用程,非托管代码,所以也无需.net framework

Visual C++2003/2005默认的MFC程序是使用动态MFC库(Use MFC in a Shared DLL)来链接的
而动态MFC库使用的是Multi-threaded DLL (/MD)
由于XP对于PE文件格式监测更加严格.
就会导致部分使用多线程DLL的可执行文件在调用的时候出错
修改项目属性的编译开关
Project->Property->configuration Properties->C/C++->Code Generation->Runtime Library
修改成Multi-threaded (/MT)
修改了Runtime类型以后
需要将MFC的编译类型也改成静态库
Project->Property->configuration Properties->General->Use of MFC
修改成Use MFC in a Static Library
一部分情况下在这步就能解决问题
另外一部分情况会遇见如下情况
编译器报错

CODE:
nafxcw.lib(afxmem.obj) : error LNK2005: "void * __cdecl operator new[](unsigned int)" (??_U@YAPAXI@Z) already defined in libcpmt.lib(newaop.obj)
[Copy to clipboard]

产生这个问题的原因是库依赖关系
在Project->Property->configuration Properties->Linker->Command Line
加入编译开关/verbose:lib可以显示详细的库链接顺序

CODE:

------ Build started: Project: PerfMonDemo, Configuration: Release Win32 ------
Linking...
Searching libraries
Searching d:\Program Files\Microsoft Visual Studio 8\VC\PlatformSDK\lib\pdh.lib:
Searching d:\Program Files\Microsoft Visual Studio 8\VC\lib\DelayImp.lib:
Searching d:\Program Files\Microsoft Visual Studio 8\VC\lib\libcpmt.lib:
Searching d:\Program Files\Microsoft Visual Studio 8\VC\atlmfc\lib\nafxcw.lib:
nafxcw.lib(afxmem.obj) : error LNK2005: "void * __cdecl operator new[](unsigned int)" (??_U@YAPAXI@Z) already defined in libcpmt.lib(newaop.obj)
Searching d:\Program Files\Microsoft Visual Studio 8\VC\lib\libcmt.lib:
Searching d:\Program Files\Microsoft Visual Studio 8\VC\PlatformSDK\lib\kernel32.lib:
Searching d:\Program Files\Microsoft Visual Studio 8\VC\PlatformSDK\lib\user32.lib:
Searching d:\Program Files\Microsoft Visual Studio 8\VC\PlatformSDK\lib\gdi32.lib:
Searching d:\Program Files\Microsoft Visual Studio 8\VC\PlatformSDK\lib\msimg32.lib:
Searching d:\Program Files\Microsoft Visual Studio 8\VC\PlatformSDK\lib\comdlg32.lib:
Searching d:\Program Files\Microsoft Visual Studio 8\VC\PlatformSDK\lib\winspool.lib:
Searching d:\Program Files\Microsoft Visual Studio 8\VC\PlatformSDK\lib\advapi32.lib:
Searching d:\Program Files\Microsoft Visual Studio 8\VC\PlatformSDK\lib\shell32.lib:
Searching d:\Program Files\Microsoft Visual Studio 8\VC\PlatformSDK\lib\comctl32.lib:
Searching d:\Program Files\Microsoft Visual Studio 8\VC\PlatformSDK\lib\shlwapi.lib:
Searching d:\Program Files\Microsoft Visual Studio 8\VC\PlatformSDK\lib\uuid.lib:
Searching d:\Program Files\Microsoft Visual Studio 8\VC\PlatformSDK\lib\oledlg.lib:
Searching d:\Program Files\Microsoft Visual Studio 8\VC\PlatformSDK\lib\ole32.lib:
Searching d:\Program Files\Microsoft Visual Studio 8\VC\PlatformSDK\lib\oleaut32.lib:
Searching d:\Program Files\Microsoft Visual Studio 8\VC\PlatformSDK\lib\urlmon.lib:
Searching d:\Program Files\Microsoft Visual Studio 8\VC\lib\OLDNAMES.lib:
Searching d:\Program Files\Microsoft Visual Studio 8\VC\atlmfc\lib\atls.lib:
Searching d:\Program Files\Microsoft Visual Studio 8\VC\PlatformSDK\lib\ws2_32.lib:
Searching d:\Program Files\Microsoft Visual Studio 8\VC\PlatformSDK\lib\mswsock.lib:
Searching d:\Program Files\Microsoft Visual Studio 8\VC\PlatformSDK\lib\oleacc.lib:
Searching d:\Program Files\Microsoft Visual Studio 8\VC\PlatformSDK\lib\pdh.lib:
Searching d:\Program Files\Microsoft Visual Studio 8\VC\lib\DelayImp.lib:
Searching d:\Program Files\Microsoft Visual Studio 8\VC\lib\libcpmt.lib:
Searching d:\Program Files\Microsoft Visual Studio 8\VC\atlmfc\lib\nafxcw.lib:
Searching d:\Program Files\Microsoft Visual Studio 8\VC\lib\libcmt.lib:
Searching d:\Program Files\Microsoft Visual Studio 8\VC\PlatformSDK\lib\kernel32.lib:
Searching d:\Program Files\Microsoft Visual Studio 8\VC\PlatformSDK\lib\user32.lib:
Searching d:\Program Files\Microsoft Visual Studio 8\VC\PlatformSDK\lib\gdi32.lib:
Searching d:\Program Files\Microsoft Visual Studio 8\VC\PlatformSDK\lib\msimg32.lib:
Searching d:\Program Files\Microsoft Visual Studio 8\VC\PlatformSDK\lib\comdlg32.lib:
Searching d:\Program Files\Microsoft Visual Studio 8\VC\PlatformSDK\lib\winspool.lib:
Searching d:\Program Files\Microsoft Visual Studio 8\VC\PlatformSDK\lib\advapi32.lib:
Searching d:\Program Files\Microsoft Visual Studio 8\VC\PlatformSDK\lib\shell32.lib:
Searching d:\Program Files\Microsoft Visual Studio 8\VC\PlatformSDK\lib\comctl32.lib:
Searching d:\Program Files\Microsoft Visual Studio 8\VC\PlatformSDK\lib\shlwapi.lib:
Searching d:\Program Files\Microsoft Visual Studio 8\VC\PlatformSDK\lib\uuid.lib:
Searching d:\Program Files\Microsoft Visual Studio 8\VC\PlatformSDK\lib\oledlg.lib:
Searching d:\Program Files\Microsoft Visual Studio 8\VC\PlatformSDK\lib\ole32.lib:
Searching d:\Program Files\Microsoft Visual Studio 8\VC\PlatformSDK\lib\oleaut32.lib:
Searching d:\Program Files\Microsoft Visual Studio 8\VC\PlatformSDK\lib\urlmon.lib:
Searching d:\Program Files\Microsoft Visual Studio 8\VC\lib\OLDNAMES.lib:
Searching d:\Program Files\Microsoft Visual Studio 8\VC\atlmfc\lib\atls.lib:
Searching d:\Program Files\Microsoft Visual Studio 8\VC\PlatformSDK\lib\ws2_32.lib:
Searching d:\Program Files\Microsoft Visual Studio 8\VC\PlatformSDK\lib\mswsock.lib:
Searching d:\Program Files\Microsoft Visual Studio 8\VC\PlatformSDK\lib\oleacc.lib:
Searching d:\Program Files\Microsoft Visual Studio 8\VC\PlatformSDK\lib\pdh.lib:
Searching d:\Program Files\Microsoft Visual Studio 8\VC\lib\DelayImp.lib:
Searching d:\Program Files\Microsoft Visual Studio 8\VC\lib\libcpmt.lib:
Finished searching libraries
Searching libraries
Searching d:\Program Files\Microsoft Visual Studio 8\VC\PlatformSDK\lib\pdh.lib:
Searching d:\Program Files\Microsoft Visual Studio 8\VC\lib\DelayImp.lib:
Searching d:\Program Files\Microsoft Visual Studio 8\VC\lib\libcpmt.lib:
Searching d:\Program Files\Microsoft Visual Studio 8\VC\atlmfc\lib\nafxcw.lib:
Searching d:\Program Files\Microsoft Visual Studio 8\VC\lib\libcmt.lib:
Searching d:\Program Files\Microsoft Visual Studio 8\VC\PlatformSDK\lib\kernel32.lib:
Searching d:\Program Files\Microsoft Visual Studio 8\VC\PlatformSDK\lib\user32.lib:
Searching d:\Program Files\Microsoft Visual Studio 8\VC\PlatformSDK\lib\gdi32.lib:
Searching d:\Program Files\Microsoft Visual Studio 8\VC\PlatformSDK\lib\msimg32.lib:
Searching d:\Program Files\Microsoft Visual Studio 8\VC\PlatformSDK\lib\comdlg32.lib:
Searching d:\Program Files\Microsoft Visual Studio 8\VC\PlatformSDK\lib\winspool.lib:
Searching d:\Program Files\Microsoft Visual Studio 8\VC\PlatformSDK\lib\advapi32.lib:
Searching d:\Program Files\Microsoft Visual Studio 8\VC\PlatformSDK\lib\shell32.lib:
Searching d:\Program Files\Microsoft Visual Studio 8\VC\PlatformSDK\lib\comctl32.lib:
Searching d:\Program Files\Microsoft Visual Studio 8\VC\PlatformSDK\lib\shlwapi.lib:
Searching d:\Program Files\Microsoft Visual Studio 8\VC\PlatformSDK\lib\uuid.lib:
Searching d:\Program Files\Microsoft Visual Studio 8\VC\PlatformSDK\lib\oledlg.lib:
Searching d:\Program Files\Microsoft Visual Studio 8\VC\PlatformSDK\lib\ole32.lib:
Searching d:\Program Files\Microsoft Visual Studio 8\VC\PlatformSDK\lib\oleaut32.lib:
Searching d:\Program Files\Microsoft Visual Studio 8\VC\PlatformSDK\lib\urlmon.lib:
Searching d:\Program Files\Microsoft Visual Studio 8\VC\lib\OLDNAMES.lib:
Searching d:\Program Files\Microsoft Visual Studio 8\VC\atlmfc\lib\atls.lib:
Searching d:\Program Files\Microsoft Visual Studio 8\VC\PlatformSDK\lib\ws2_32.lib:
Searching d:\Program Files\Microsoft Visual Studio 8\VC\PlatformSDK\lib\mswsock.lib:
Searching d:\Program Files\Microsoft Visual Studio 8\VC\PlatformSDK\lib\oleacc.lib:
Searching d:\Program Files\Microsoft Visual Studio 8\VC\PlatformSDK\lib\pdh.lib:
Searching d:\Program Files\Microsoft Visual Studio 8\VC\lib\DelayImp.lib:
Searching d:\Program Files\Microsoft Visual Studio 8\VC\lib\libcpmt.lib:
Searching d:\Program Files\Microsoft Visual Studio 8\VC\atlmfc\lib\nafxcw.lib:
Finished searching libraries
.\Release/PerfMonDemo.exe : fatal error LNK1169: one or more multiply defined symbols found
Build log was saved at "file://d:\Dev\Performance Monitor\Release\BuildLog.htm"
PerfMonDemo - 2 error(s), 0 warning(s)
========== Build: 0 succeeded, 1 failed, 0 up-to-date, 0 skipped ==========

[Copy to clipboard]

我们发现在libcpmt.lib声明过的operator new在nafxcw.lib中再次定义
解决方法如下
Project->Property->configuration Properties->Linker->Input->Additional Dependencies
加入
nafxcw.lib
libcpmt.lib
Project->Property->configuration Properties->Linker->Input->Ignore Specific Library
加入
nafxcw.lib
libcpmt.lib
这样链接程序就不会先按照默认顺序来连接这两个库文件
而是在最后在加入对他们的引用.这样就避免了这个问题
下面是一张可能发生冲突的列表
若要使用此运行时库 请忽略这些库
单线程 (libc.lib) libcmt.lib、msvcrt.lib、libcd.lib、libcmtd.lib、msvcrtd.lib
多线程 (libcmt.lib) libc.lib、msvcrt.lib、libcd.lib、libcmtd.lib、msvcrtd.lib
使用 DLL 的多线程 (msvcrt.lib) libc.lib、libcmt.lib、libcd.lib、libcmtd.lib、msvcrtd.lib
调试单线程 (libcd.lib) libc.lib、libcmt.lib、msvcrt.lib、libcmtd.lib、msvcrtd.lib
调试多线程 (libcmtd.lib) libc.lib、libcmt.lib、msvcrt.lib、libcd.lib、msvcrtd.lib
使用 DLL 的调试多线程 (msvcrtd.lib) libc.lib、libcmt.lib、msvcrt.lib、libcd.lib、libcmtd.lib

//本人曾经对上面的方法进行测试,修改后可能出现XX无法解析的情况,请大家使用MSDN查找该函数,并且找到该函数对应的lib库文件。将其添加到附加依赖项或者是用#pragma comment(lib,"xxx.lib")将其添加到代码中!
另外,站长团上有产品团购,便宜有保证

⑺ ios 能编译动态库吗

一、创建FrameWork工程

新建工程,选择创建FrameWork工程或者静态库(Static Library)。






  • ⑻ C++通过什么编译器编译成的静态库给ios调用

    用的是gcc编译器或者xcode编译就可以。
    在开发过程中,经常会碰到一些在不同工程中经常用到的部分,把这些部分抽取出来做成一个静态库往往是一个比较好的做法。xcode里就有制作静态库的模板,相关的制作步骤网上也有很多,但在实际的操作中,还是有不少细节方面需要注意。以下是我碰到的一些问题总结。

    1.编译release版本的库
    在“Manage Schemes”中,将“Build Configuration”的选项改为“Release”即可。如图:

    2.静态库中包含category
    如果你在静态库工程中使用了category,那么你可能会碰到链接问题,解决的办法就是需要同时在生成静态库的工程和使用静态库的工程中使用“-all_load”编译选项,即在对应target的"Build Settings"中的“Other Linker Flags”选项添加“-all_load”。注意:使用静态库的工程中是一定要加该编译选项的!!至于生成静态库的工程中加不加没有试过,不过建议还是加上该编译选项。

    3.静态库支持的SDK版本
    为了使自己的静态库尽可能多的支持IOS的系统版本,应该在"IOS Deployment Target"这个选项中选择自己所需的IOS版本。设置如下图,这个是我的静态库工程中的配置,红框框起来的是我修改过的选项。

    4.自动拷贝头文件
    在工程对应的target的“Build Phases”下添加“Copy Headers”的选项。该选项默认是没有的,添加方法是点击下方的“Add Build Phase”按钮后选择后即可添加。该选项下有3个子选项,分别是Public,Private,Project。通过点击下方的加号,可以将工程中的头文件添加到“Project”中,在其中的对应头文件点击右键,选择“Move to Public Group”,当头文件移到“Pulic”后,编译工程以后,在工程编译后.a文件所在的路径下,会同时出现一个"usr/local/include"的文件夹,其中的头文件就是public group中的头文件。这时只需将.a文件和这个路径下的头文件拷贝到所需工程文件即可。
    转载

    ⑼ ios a静态库 能反编译吗

    .a静态库不能进行反编译,反汇编的可能性也极低。
    静态库:静态库仅在程序启动时被连接使用,程序运行时将不再需要该静态库。
    与静态库相对的是动态库:程序编译时并不会被连接到目标代码中,而是在程序运行是才被载入,因此在程序运行时还需要动态库存在。

    ⑽ 有谁知道ipad上怎么编译c吗

    本iOSC/iOSC++适用于iPhone 5S、iPad 4。
    经测试,本软件可以编译 复杂命令行程序、运用了各种Framework的IPA程序、cmake、SDL2库、运用了SDL2的程序、同时运用SDL2和UIKit的程序、纯算法程序。

    1、请先安装必须软件包,从这个汇总贴子里下载:http://bbs.weiphone.com/read-htm-tid-5259660.html
    如果您觉得不放心,这些软件包可以在code.google.com各自的项目里下载

    (注:安装方法:)
    (先在Cydia中安装Debian Packager)
    (然后在终端模拟器或SSH中进入DEB文件夹以root权限运行dpkg -i *)

    2、然后请用Mac OS安装Xcode,提取/Applications/Xcode.app/Contents/Developer/Platforms/iPhoneOS.platform/到您的iPhone5s或者iPad4上。

    3、在Cydia中安装class mp和classmp-dyld,这个工具可以在你需要Private Framework的头文件时,为你反编译出可用的头文件。(Private Framework本身是不提供头文件的)

    4、最后把您需要的可执行文件复制到/usr/bin目录并设置可执行权限。

    在iosc文件夹和iosc++文件夹中,各个版本目录下文件说明:
    main.cpp ——此版本源代码
    a.out,iosc,iosc++ ——此版本二进制可执行文件
    config.txt ——此版本最佳配置文件。
    注:配置文件一般自动生成。如果
    希望iosc/iosc++尽量不提问,可以
    把这个config.txt复制
    到/var/mobile/.ioscpp/config.txt

    5、iosc、iosc++在V1.3之后有一次渺小而重要的更新,运用此更新,用户第一次有把握在iPhone5S、iPad4设备上从复杂源代码搭建实用工具,例如cmake、SDL2。此更新保证开发者在iOS 7上可以编译任何C/C++代码。因此,自V1.3以后的代码暂不开源。

    6、利用theos可以从源代码编译iOS IPA程序。貌似不支持Storyboard。

    !注意!如果需要安装产生的IPA,需要AppSync补丁,因为没签名……

    (编译方法:)
    (从原帖子下载整个压缩包,仅提取其中的theos文件夹)
    (从本目录安装好iosc/iosc++)
    (把本目录中的ipa.nic.zip等nic.zip文件拷贝到theos/templates/iphone/)
    (利用Nic建立项目,进入项目文件夹用make编译)

    热点内容
    怎么在红帽上装c语言编译器 发布:2024-05-06 13:58:38 浏览:507
    linuxtomcat设置 发布:2024-05-06 13:50:11 浏览:28
    c语言需要什么基础 发布:2024-05-06 13:46:10 浏览:687
    python利器 发布:2024-05-06 13:33:56 浏览:731
    ts代码编译成umd 发布:2024-05-06 13:13:38 浏览:724
    粮库存储粮种类 发布:2024-05-06 13:11:26 浏览:52
    一般网络的dns服务器是什么 发布:2024-05-06 13:02:43 浏览:153
    压缩模具设计 发布:2024-05-06 13:02:04 浏览:562
    逍遥模拟器如何配置网络 发布:2024-05-06 12:21:38 浏览:983
    服务器如何检测硬件地址 发布:2024-05-06 12:12:35 浏览:739