小编hfh*_*hc2的帖子

添加AC_CHECK_LIB的路径

我在configure.ac中遇到以下问题:

我想添加一个库搜索路径,因为我必须使用的库是在一些疯狂的文件夹中.我的想法是选择这样做:

AC_ARG_WITH([cplex-lib-path],
  [AS_HELP_STRING([--with-cplex-libs], [location of the CPLEX library])],
  [CPLEX_LIBS="-L$withval --lcplex"],
  [])
Run Code Online (Sandbox Code Playgroud)

如果有人指定了库路径,我当然希望看看是否可以找到库:

AC_CHECK_LIB([cplex], [CPXcreateprob], [],
[
  AC_MSG_ERROR([Could  not find CPLEX library])
])
Run Code Online (Sandbox Code Playgroud)

但是,我想将CPLEX_LIBS添加到AC_CHECK_LIB的库搜索路径.这有点可能吗?

autotools

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

如何调试预处理器宏

我最近遇到过这个项目.代码主要用C语言编写,API只包含几个C函数.不幸的是,该项目似乎包含一些错误,特别是我不断得到"双重免费或腐败"错误.我正在尝试使用valgrind和gdb来找出问题所在.问题似乎是在内存分配器中.不幸的是,第一个valgrind错误发生在头中定义的约400行长预处理器宏中.不幸的是,gdb无法破坏生成的代码.堆栈跟踪也不是很有用.有没有什么技术可以用来处理这类错误?

c debugging c-preprocessor

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

限制固定输出的尾随零数

我需要一些使用C++流输出格式化的帮助.我想打印固定小数点和最多2个尾随位置的数字.我尝试过以下方法:

#include <iostream>
#include <iomanip>
using namespace std;

int main(int argc, char **argv)
{
  float testme[] = { 0.12345, 1.2345, 12.345, 123.45, 1234.5, 12345 };

  std::cout << std::setprecision(2) << std::fixed;

  for(int i = 0; i < 6; ++i)
  {
      std::cout << testme[i] << std::endl;
  }

  return 0;
}
Run Code Online (Sandbox Code Playgroud)

输出是:

0.12
1.23
12.35
123.45
1234.50
12345.00
Run Code Online (Sandbox Code Playgroud)

但我想拥有

0.12
1.23
12.35
123.45
1234.5
12345
Run Code Online (Sandbox Code Playgroud)

我可以在不使用额外的字符串操作的情

c++ iostream string-formatting

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

将LocalDateTime与JAXB一起使用

我试图使用JAXB与该LocalDateTime类型的字段.我写了一个适配器来处理转换:

public class LocalDateTimeXmlAdapter extends XmlAdapter<String, LocalDateTime> {
    @Override
    public String marshal(LocalDateTime arg0) throws Exception {
        return arg0.toString();
    }

    @Override
    public LocalDateTime unmarshal(String arg) throws Exception {
        return LocalDateTime.parse(arg);
    }
}
Run Code Online (Sandbox Code Playgroud)

我这样注册了适配器package-info.java:

@XmlJavaTypeAdapters({
        @XmlJavaTypeAdapter(type=LocalDateTime.class, value=LocalDateTimeXmlAdapter.class)
})
package xml;

import java.time.LocalDateTime;

import javax.xml.bind.annotation.adapters.XmlJavaTypeAdapter;
import javax.xml.bind.annotation.adapters.XmlJavaTypeAdapters;
Run Code Online (Sandbox Code Playgroud)

根据这个页面,这似乎已经足够了.但是,我不断收到以下错误:

com.sun.xml.bind.v2.runtime.IllegalAnnotationsException: 1 counts of IllegalAnnotationExceptions
java.time.LocalDateTime does not have a no-arg default constructor.
Run Code Online (Sandbox Code Playgroud)

我理解抛出异常的原因,但我几乎无法添加默认构造函数java.time.LocalDateTime.这似乎是班级/一个奇怪的设计决定的缺点.有没有解决方法?

java time jaxb

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

如何处理.tar.md5文件

我想知道如何创建/提取/验证.tar.md5文件.将图像闪存到Android设备时使用这些文件,例如,请参见此处.

据我所知,校验和附加到文件中,如下所示:

cp file.tar file.tar.md5
md5sum file.tar >> file.tar.md5
Run Code Online (Sandbox Code Playgroud)

首先,我想知道如何提取文件.我可以简单地使用tar -xf的file.tar.md5?

如何验证文件的完整性?我想从文件中删除最后一个字节(包含校验和)以获取原始文件.我想你必须使用正则表达式匹配checksum file.tar?这样的事情已经在某处实现了吗?

android checksum tar

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

如何在 GDB 中漂亮地打印 Rust 结构?

我如何Vec在rust-gdb或 plain 中漂亮地打印结构(特别是 s)gdb?每当我打电话时,p some_vector我都会得到这个结果:

collections::vec::Vec<usize> = {buf = alloc::raw_vec::RawVec<usize> = {ptr = core::ptr::Unique<usize> = {pointer = core::nonzero::NonZero<*const usize> = {
    0x7ffff640d000}, _marker = core::marker::PhantomData<usize>}, cap = 16}, len = 10}
Run Code Online (Sandbox Code Playgroud)

这只是不可读。有没有办法得到显示内容的结果Vec?我正在使用 Rust 1.12 和 GDB 7.12。

debugging gdb pretty-print rust

6
推荐指数
0
解决办法
2421
查看次数

Cython 函数指针和异常

我正在尝试使用 cython 包装现有的 C 库。该库使用我想重定向来执行 python 代码的回调。假设标题中的相应行如下:

typedef RETCODE (*FUNC_EVAL)(int a, int b, void* func_data);
Run Code Online (Sandbox Code Playgroud)

其中返回码用于发出错误信号。创建对应的 C 结构体的 API 如下:

RETCODE func_create(Func** fstar,
                    FUNC_EVAL func_eval,
                    void* func_data);
Run Code Online (Sandbox Code Playgroud)

我添加了一个 cython 头文件/实现文件。标头包含 typedef:

  ctypedef RETCODE (*FUNC_EVAL)(int a,
                                int b, 
                                void* func_data)
Run Code Online (Sandbox Code Playgroud)

该实现包含一个包装函数:

cdef RETCODE func_eval(int a,
                       int b,
                       void* func_data):
  (<object> func_data).func_eval(a, b)
  return OKAY;
Run Code Online (Sandbox Code Playgroud)

我可以把这个函数传递给func_createcython 包装器就好了。

但是,我想通过返回一个ERROR值作为返回码来确保将 python 代码中的异常报告回 C 库。所以我添加了以下内容:

cdef RETCODE func_eval(int a,
                       int b,
                       void* func_data) except ERROR:
  (<object> func_data).func_eval(a, b)
  return OKAY;
Run Code Online (Sandbox Code Playgroud)

但是,现在 …

python function-pointers cython

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

使用stringstreams进行strdup会导致valgrind错误

我有以下问题:我正在编写一个必须包装C库的C++程序,所以当我与库交互时,我总是必须使用char*而不是std::string所有操作.为了避免char*尽可能多地使用,我使用stringstreams进行格式化,例如:

#include <iostream>
#include <sstream>
#include <string.h>
#include <cstdlib>

using namespace std;

int main(int argc, char** argv)
{
  ostringstream str;

  str << argv[0] << "+" << "hello";

  const char *s = str.str().c_str();

  char *y = strdup(s);

  // this I would give to a library function

  cout << y << endl;

  free(y);

  return 0;
}
Run Code Online (Sandbox Code Playgroud)

就输出而言,程序正确输出"./test+hello".但是,valgrind给了我很多类型的错误

==30350== Invalid read of size 1
==30350==    at 0x402B858: __GI_strlen (in /usr/lib/valgrind/vgpreload_memcheck-x86-linux.so)
==30350==    by 0x4213475: strdup (in /usr/lib/libc-2.16.so)
==30350== …
Run Code Online (Sandbox Code Playgroud)

c++ valgrind

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

C++代码的静态链接

我有以下问题:我使用以下类来初始化C库:

class Hello
{
public:
  Hello()
  {
    cout << "Hello world" << endl;
  }

  ~Hello()
  {
    cout << "Goodbye cruel world" << endl;
  }

} hello_inst;
Run Code Online (Sandbox Code Playgroud)

如果我将此代码包含在hello.cc文件中并将其与包含main()的另一个文件一起编译,则会在调用main()之前创建hello_inst并将其销毁.在这种情况下,它只打印一些行,在我的项目中,我通过LIBXML_TEST_VERSION初始化libxml.

我正在创建多个可执行文件,它们在cmake项目中共享许多相同的代码.根据这个线程:在CMake中添加多个可执行文件我创建了一个包含上面显示的代码的静态库,然后将可执行文件链接到该库.不幸的是,在这种情况下,永远不会创建hello_inst(并且永远不会初始化libxml2).我该如何解决这个问题?

c++ cmake static-libraries

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

为事件循环创建一个observable

我最近一直在阅读关于rx-java的一些内容.我想知道框架是否适合线程之间的通信系统的账单.我正在使用java编写的REST服务器.每次某些资源是PUT/POST时,我想使用工作线程池进行一些计算.但是,我仍然希望能够监控请求,也许打印出一些统计信息.基本上我想要一个,Observable所以我可以灵活地处理多个Observers 的请求.

我的问题是,我该如何创造一个合适的Observable?我见过的大多数指南都涉及对Observables的操作,例如映射等.Obervables主要是从集合或整数范围创建的.在任何情况下,似乎都不可能将新值推送到创建的Observables.显然,保持这种灵活性的唯一方法就是使用Observable.create.然而,这似乎是相当低级的.我必须为每个新订阅者实现一个队列列表,并对每个订阅者进行synchronized推送.这是真的有必要还是已经在rx-java中实现了这样的东西?

java multithreading rx-java

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