Я хотел бы добавить библиотеку c ++ cpp-netlib в wscript.
Тогда, если я бегу dpkg -l libcppnetlib0
Я получаю:
libcppnetlib0: 0.11.0-1 amd64 C++ Network Library
Бег: dpkg -L libcppnetlib0
Я получаю:
/.
/usr
/usr/lib
/usr/lib/x86_64-linux-gnu
/usr/lib/x86_64-linux-gnu/cppnetlib-uri.so.0.11.0
/usr/lib/x86_64-linux-gnu/cppnetlib-server-parsers.so.0.11.0
/usr/lib/x86_64-linux-gnu/cppnetlib-client-connections.so.0.11.0
/usr/share
/usr/share/lintian
/usr/share/lintian/overrides
/usr/share/lintian/overrides/libcppnetlib0
/usr/share/doc
/usr/share/doc/libcppnetlib0
/usr/share/doc/libcppnetlib0/copyright
/usr/share/doc/libcppnetlib0/changelog.Debian.gz
/usr/lib/x86_64-linux-gnu/libcppnetlib-server-parsers.so.0
/usr/lib/x86_64-linux-gnu/libcppnetlib-client-connections.so.0
/usr/lib/x86_64-linux-gnu/libcppnetlib-uri.so.0
Так как мне нужно libcppnetlib-uri, libcppnetlib-server-parsers, libcppnetlib-client-connections
В wscript я добавляю следующие поля:
conf.check_cxx(lib='cppnetlib-uri',uselib_store='CPPNETLIBU', define_name='HAVE_CPPNETLIBU',mandatory=True)
conf.check_cxx(lib='cppnetlib-server-parsers',uselib_store='CPPNETLIBS', define_name='HAVE_CPPNETLIBS',mandatory=True)
conf.check_cxx(lib='cppnetlib-client-connections',uselib_store='CPPNETLIBC', define_name='HAVE_CPPNETLIBC',mandatory=True)
Затем я добавил три ссылки (CPPNETLIBU, CPPNETLIBC, CPPNETLIBS) здесь:
libndn_cxx = dict(
target="ndn-cxx",
name="ndn-cxx",
source=bld.path.ant_glob('src/**/*.cpp',
excl=['src/security/**/*-osx.cpp',
'src/**/*-sqlite3.cpp']),
headers='src/common-pch.hpp',
use='version BOOST CRYPTOPP OPENSSL SQLITE3 RT PTHREAD CPPNETLIBC CPPNETLIBU CPPNETLIBS',
includes=". src",
export_includes="src",
install_path='${LIBDIR}')
Но когда я запускаю ./waf configure, он терпит неудачу, он не находит библиотеки, которые я указал.
Ошибка:
[199/200] Linking build/examples/clientMat
examples/clientMat.cpp.2.o: In function `construct<boost::network::http::impl::normal_delegate, asio::io_service&>':
/usr/include/c++/4.9/ext/new_allocator.h:120: undefined reference to `boost::network::http::impl::normal_delegate::normal_delegate(asio::io_service&)'
/usr/lib/gcc/x86_64-linux-gnu/4.9/../../../x86_64-linux-gnu/libcppnetlib-client-connections.so: undefined reference to `boost::system::system_category()'
/usr/lib/gcc/x86_64-linux-gnu/4.9/../../../x86_64-linux-gnu/libcppnetlib-client-connections.so: undefined reference to `boost::system::generic_category()'
collect2: error: ld returned 1 exit status
Я (может быть?) Идентифицировал проблему в отсутствие какой-либо ссылки в / usr / local / lib / pkgconfig. Действительно, работает: ls /usr/local/lib/pkgconfig
, У меня есть немного .pc
файлы, но ничего о cppnetlib. Я пытался написать свой без успеха.
Если проблема здесь, на самом деле мне нужна помощь о том, как написать .pc
файлы правильно.
Этот вопрос был хорошей отправной точкой, но у меня не получилось так же: waf — как добавить внешнюю библиотеку в файл wscript_build
Ты можешь использовать bld.read_shlib () как описано в https://waf.io/book/
пример кода (main.c):
#include <stdio.h>
#include <math.h>
int main(int argc, char* argv[]) {
printf("cos(0.123456)=%f\n", cos(0.123456));
return 0;
}
построить скрипт с использованием математической библиотеки:
#!/usr/bin/env python
# -*- encoding: utf-8 -*-
top = '.'
out = 'build'
VERSION = '0.0.0'
APPNAME = 'app'
def options(opt):
opt.load('compiler_c')
def configure(conf):
conf.load('compiler_c')
conf.check_cc(lib='m', cflags='-Wall', uselib_store='M')
conf.check(header_name='math.h', features='c cprogram')
def build(bld):
bld.read_shlib('m')
bld.program(target='app', source='main.c')
Других решений пока нет …