安装Xerces-C ++(XML库)后:
./configure --disable-shared
./make
./make-install
ldconfig
Run Code Online (Sandbox Code Playgroud)
并编写简单程序(xmlval.cpp):
#include <stdio>
#include <xercesc/dom/DOM.hpp>
int main()
{
std::cout << "HI" << std::endl;
}
Run Code Online (Sandbox Code Playgroud)
并编译:
/usr/bin/g++ -L/usr/local/lib -I/usr/local/include -o xmlval xmlval.cpp /usr/local/lib/libxerces-c.a
Run Code Online (Sandbox Code Playgroud)
编译结果是一串这样的代码:
/usr/local/lib/libxerces-c.a(CurlNetAccessor.o): In function `xercesc_3_0::CurlNetAccessor::cleanupCurl()':
/home/stullbd/xerces-c-3.0.1/src/xercesc/util/NetAccessors/Curl/CurlNetAccessor.cpp:78: undefined reference to `curl_global_cleanup'
/usr/local/lib/libxerces-c.a(CurlNetAccessor.o): In function `xercesc_3_0::CurlNetAccessor::initCurl()':
/home/stullbd/xerces-c-3.0.1/src/xercesc/util/NetAccessors/Curl/CurlNetAccessor.cpp:70: undefined reference to `curl_global_init'
/usr/local/lib/libxerces-c.a(CurlURLInputStream.o): In function `~CurlURLInputStream':
/home/stullbd/xerces-c-3.0.1/src/xercesc/util/NetAccessors/Curl/CurlURLInputStream.cpp:168: undefined reference to `curl_multi_remove_handle'
Run Code Online (Sandbox Code Playgroud)
有什么想法吗?
我需要一些关于如何设置我的项目的建议.我正在构建一个静态库,并想知道在我走得太远之前我使用预编译头的方式是否正确.
到目前为止,我的stdafx文件只包括(对于类似DWORD等类型)和(对于std :: string).
我构建了一个名为TestFuncs.cpp/h的简单cpp/header组合
TestFuncs.cpp:
#include "stdafx.h"
using namespace std;
void MyFunc(DWORD a, string b) {
// irrelevant
}
Run Code Online (Sandbox Code Playgroud)
TestFuncs.h
#pragma once
void MyFunc(DWORD a, std::string b);
Run Code Online (Sandbox Code Playgroud)
这里的代码编译正确.我遇到的问题是当我想在另一个项目中使用这个静态库时,我通常会做#include"path_to_my_static_lib_project/TestFuncs.h"
但是,这个问题基于TestFuncs.h,当时DWORD和string都是未知的,因为它们是从stdafx.h文件定义的类型.
我提出的一个解决方案(我不知道这样做是正确的)只是在#pragma一次之后将stdafx.h包含在TestFuncs.h的顶部.现在,项目使用预编译头文件工作文件.
这是应该怎么做,还是有正确的方法这样做?
谢谢.
这是一个菜鸟问题.我正在尝试学习如何使用SWIG为C++库创建python接口.该图书馆是专有的第三方图书馆; 它以头文件(foo.h)和静态存档(libfoo.a)的形式出现在我面前.
为了简化问题,我已经制作了一个我认为具有相同病理的例子.反正相同的错误消息.
/* foo.hpp */
class TC {
public:
TC();
int i;
private:
};
Run Code Online (Sandbox Code Playgroud)
作为参考,这里是foo.c. 我只有真正的第三方库的头文件和存档文件.
/*foo.cxx */
#include "foo.hpp"
TC::TC() {
i = 0;
}
Run Code Online (Sandbox Code Playgroud)
我通过打字创建了这个库 g++ -c foo.cxx && ar rcs libfoo.a foo.o
我的SWIG接口文件如下:
/* foo.i */
%module foo
%{
#include "foo.hpp"
%}
%include "foo.hpp"
Run Code Online (Sandbox Code Playgroud)
我输入生成foo_wrap.cxx
swig -python -c++ foo.i
Run Code Online (Sandbox Code Playgroud)
然后编译.
g++ -c -fPIC -I/usr/include/python2.6 foo_wrap.cxx
g++ -shared -L. -lfoo -lpython2.6 -Wl,-soname,_foo.so foo_wrap.o -o _foo.so
Run Code Online (Sandbox Code Playgroud)
编译成功,但是当我运行Python时import foo,我得到一个未定义的符号错误.
>>> import foo
Traceback (most recent call last): …Run Code Online (Sandbox Code Playgroud) 他们说,这个链接讨论了如何创建iOS静态框架
对于静态库,您必须单独分发其他所有内容(包括头文件).
实际上我发现使用静态库和框架之间没有区别,你可以查看Admob SDK(https://developers.google.com/mobile-ads-sdk/docs/),他们要求的只是提取所有文件XCode项目,所以我真的不明白为什么我们需要在纯静态lib上使用框架,或者我错过了什么?
我需要阻止C++静态库在软件评估期的过期日期之后链接.我怎样才能做到这一点?
这应该适用于最新版本的Visual C++编译器(2012年,2010年,理想情况下为2008年).对更多编译器的支持将是一个加分(英特尔,gcc,游戏控制台编译器).能够在到期日期前几天弹出编译器警告也是一个很好的功能.
我已经实现了一个二叉树程序,其中包括带有函数的tree.c,带有声明的tree.h和用于测试的main.c. 另外,我有一个makefile,它是:
CC=gcc
CFLAGS=-g -Wall
DEPS = tree.h
OBJ = main.o tree.o
%.o: %.c $(DEPS)
$(CC) -c -o $@ $< $(CFLAGS)
tree: $(OBJ)
$(CC) -o $@ $^ $(CFLAGS)
clean:
rm -f *.o tree
Run Code Online (Sandbox Code Playgroud)
现在我想让它生成一个库,不仅是二进制树函数的对象文件,之后在makefile中生成doxygen的文档.任何帮助都会有所帮助.
我在Ubuntu QQ上使用CodeLite 5.1.默认情况下,基于之前使用QQ和其他工具安装的内容,我有gtCC和gt ++工具链可用.我总是使用gt ++,这似乎与Boost相处得很好.
想要使用C++ 11运行 - 我需要采取哪些步骤?我需要安装C++ 11库吗?
我创建了一个静态库,并尝试使用链接将其绑定到Monotouch
在绑定中,我想将NSArray从MonoTouch传递给Objective C.我在ApiDefinition.cs中定义它,如NSObject [] DataArray {get; 组; }
var b = new [] {"Item 1","Item 2","Item 3"};
得到以下错误
无法将类型'string []'隐式转换为MonoTouch.Foundation.NSObject []
NSArray array1 = NSArray.FromObjects("Item 1","Item 2","Item 3");
得到以下错误
无法将MonoTouch.Foundation.NSArray类型隐式转换为MonoTouch.Foundation.NSObject []
如何将数组从MonotOuch传递到Objective C?
我在c ++程序中使用静态库.内存可以存储库的多个副本吗?或者对于一个程序,一个静态库的副本?
我正在尝试将一个小的C++测试程序链接main.o到第三方静态库,但是会得到一些无法解释的undefined reference错误.
特别:
g++ -o secoTest -lpthread main.o libEAPI.a
main.o: In function `main':
main.cpp:(.text+0x29fe): undefined reference to `EApiWDog_SetConfigAndStart(unsigned int, unsigned int, unsigned int, unsigned int, unsigned char, unsigned char, unsigned char)'
main.cpp:(.text+0x33fc): undefined reference to `EApiSetCarrier(unsigned char)'
main.o:main.cpp:(.text+0x3956): more undefined references to `EApiSetCarrier(unsigned char)' follow
main.o: In function `main':
main.cpp:(.text+0x3965): undefined reference to `EApiGPIOGetSerialCfg(unsigned char*)'
main.cpp:(.text+0x3a0a): undefined reference to `EApiSetCarrier(unsigned char)'
main.cpp:(.text+0x3a19): undefined reference to `EApiGPIOSetSerialCfg(unsigned char)'
main.cpp:(.text+0x3adf): undefined reference to `EApiFanEnable(unsigned int, unsigned char)'
main.cpp:(.text+0x3b83): …Run Code Online (Sandbox Code Playgroud) static-libraries ×10
c++ ×7
c ×1
c++11 ×1
codelite ×1
doxygen ×1
ios ×1
iphone ×1
makefile ×1
objective-c ×1
python ×1
swig ×1
visual-c++ ×1
xamarin.ios ×1
xcode ×1