标签: static-libraries

xerces-c ++编译/链接问题

安装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)

有什么想法吗?

c++ compiler-errors linker-errors static-libraries

1
推荐指数
1
解决办法
2080
查看次数

将预编译头与静态库项目一起使用

我需要一些关于如何设置我的项目的建议.我正在构建一个静态库,并想知道在我走得太远之前我使用预编译头的方式是否正确.

到目前为止,我的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的顶部.现在,项目使用预编译头文件工作文件.

这是应该怎么做,还是有正确的方法这样做?

谢谢.

c++ static-libraries precompiled-headers

1
推荐指数
1
解决办法
3861
查看次数

为静态库编译SWIG Python包装器?

这是一个菜鸟问题.我正在尝试学习如何使用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)

c++ python swig static-libraries undefined-symbol

1
推荐指数
1
解决办法
4320
查看次数

iOS静态框架和静态库

他们说,这个链接讨论了如何创建iOS静态框架

对于静态库,您必须单独分发其他所有内容(包括头文件).

实际上我发现使用静态库和框架之间没有区别,你可以查看Admob SDK(https://developers.google.com/mobile-ads-sdk/docs/),他们要求的只是提取所有文件XCode项目,所以我真的不明白为什么我们需要在纯静态lib上使用框架,或者我错过了什么?

iphone xcode objective-c static-libraries ios

1
推荐指数
1
解决办法
2898
查看次数

在过期日期之前阻止C++库链接

我需要阻止C++静态库在软件评估期的过期日期之后链接.我怎样才能做到这一点?

这应该适用于最新版本的Visual C++编译器(2012年,2010年,理想情况下为2008年).对更多编译器的支持将是一个加分(英特尔,gcc,游戏控制台编译器).能够在到期日期前几天弹出编译器警告也是一个很好的功能.

c++ static-libraries visual-c++

1
推荐指数
1
解决办法
331
查看次数

扩展makefile以使用doxygen生成库和文档

我已经实现了一个二叉树程序,其中包括带有函数的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的文档.任何帮助都会有所帮助.

c doxygen makefile static-libraries

1
推荐指数
1
解决办法
6621
查看次数

如何在OpenSource IDE(codelite)中迁移到C++ 11

我在Ubuntu QQ上使用CodeLite 5.1.默认情况下,基于之前使用QQ和其他工具安装的内容,我有gtCC和gt ++工具链可用.我总是使用gt ++,这似乎与Boost相处得很好.

想要使用C++ 11运行 - 我需要采取哪些步骤?我需要安装C++ 11库吗?

c++ compiler-construction static-libraries c++11 codelite

1
推荐指数
1
解决办法
3030
查看次数

在MonoTouch和Objective C之间绑定NSArray

我创建了一个静态库,并尝试使用链接将其绑定到Monotouch

在绑定中,我想将NSArray从MonoTouch传递给Objective C.我在ApiDefinition.cs中定义它,如NSObject [] DataArray {get; 组; }

  • 当我尝试从MonoTouch传递字符串数组时

var b = new [] {"Item 1","Item 2","Item 3"};

得到以下错误

无法将类型'string []'隐式转换为MonoTouch.Foundation.NSObject []

  • 当我尝试从MonoTouch传递NSArray时

NSArray array1 = NSArray.FromObjects("Item 1","Item 2","Item 3");

得到以下错误

无法将MonoTouch.Foundation.NSArray类型隐式转换为MonoTouch.Foundation.NSObject []

如何将数组从MonotOuch传递到Objective C?

static-libraries xamarin.ios

1
推荐指数
1
解决办法
1856
查看次数

c ++:内存中静态库的多个副本

我在c ++程序中使用静态库.内存可以存储库的多个副本吗?或者对于一个程序,一个静态库的副本?

c++ static-libraries

1
推荐指数
1
解决办法
305
查看次数

将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)

c++ static-libraries

1
推荐指数
1
解决办法
1964
查看次数