小编gct*_*gct的帖子

CMake链接到Windows上的共享库:关于找不到.lib文件的错误

我在CMake中有一个库定义,用一小组文件构建一个共享库,我已经在linux和windows上编译得很好.

但是,我还有另一个链接到共享库的库,它在linux上工作正常,但是,在Windows上我得到了一条消息或者"链接时错误找不到Release/nnet.lib" .有什么特别的东西我要做到这个链接在Windows上吗?

编辑,示例:

主共享库(文件名已更改以保护无辜者):

ADD_LIBRARY(nnet SHARED
  src/nnet/file_1.cc src/nnet/file_3.cc  
  src/nnet/file_2.cc src/nnet/file_4.cc)
Run Code Online (Sandbox Code Playgroud)

然后我正在构建一个链接在库中的python模块:

# Build python module
ADD_LIBRARY            (other_lib SHARED ${CMAKE_SOURCE_DIR}/src/boost/boost_main.cc)
TARGET_LINK_LIBRARIES  (other_lib nnet   ${PYTHON_LIBRARIES})
Run Code Online (Sandbox Code Playgroud)

其余的只是样板(例如:在Windows上将模块扩展名更改为.pyd,查找python库/标题等)然后在VS 2008中构建时,我得到:

致命错误LNK1181:无法打开输入文件'Release \nnet.lib'

在构建other_lib时.注意在构建nnet时不会抛出任何错误.

c++ windows cmake

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

最大除数使得两个数除以它的数值相同?

我有一个算法可以解释为将数字行分成相同数量的块.为简单起见,我会坚持使用[0,1],它将被分割为:

0|----|----|----|----|1
Run Code Online (Sandbox Code Playgroud)

我需要做的是取一个数字范围[j,k]并找到最大数量的块,N,最多到某个最大值M,这将分割数字线,使[j,k]仍然全部落入同样的"垃圾箱".这比它听起来更棘手,因为范围可以像这样跨越一个箱子:

    j|-|k
0|----|----|----|----|1
Run Code Online (Sandbox Code Playgroud)

因此,在完全包含范围之前,您可能必须达到相当低的数字.更重要的是,随着箱柜数量的增加,范围可能会移入和移出单个箱柜,因此存在局部最小值.

显而易见的答案是从M箱开始,并减少数量,直到范围落入单个箱.但是,我想知道是否有比列举所有可能的划分更快的方法,因为我的最大数量可以合理地大(8000万左右).

有更好的算法吗?

algorithm

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

避免"ISO C99要求使用休息参数"

使用gcc 4.6.3(带-ansi -pedantic),我有以下代码:

// Argument counting macro
#define NARGS(...) NARGS_(__VA_ARGS__, 5, 4, 3, 2, 1)
#define NARGS_(_1, _2, _3, _4, _5, _, ...) _

static inline void fi_init_(size_t nargs, fileinfo_t *finfo, ...) {
    // Default fmt/type values
    char* fmt  = "CD";
    int   type = 1000;

    if (nargs == 2) {
        va_list  ap;
        va_start(ap, hdr);
        fmt  = va_arg(ap, char*);
        type = va_arg(ap, int);
        va_end(ap);
    } 

    // Do some junk with it
}

#define fi_init(...) fi_init_(NARGS(__VA_ARGS__)-1, __VA_ARGS__)
Run Code Online (Sandbox Code Playgroud)

当被称为:

fileinfo_t out; fi_init(&out);
Run Code Online (Sandbox Code Playgroud)

我收到警告: …

c gcc c99 gcc-warning variadic-macros

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

在Linux中丢弃来自管道或套接字的数据的最佳方法?

我遇到了一种情况,我可能想“跳过”管道或套接字中的数据进行处理。我当然可以将数据读入缓冲区并丢弃它,但是有更有效的方法吗?也许像 sendfile 这样的东西可以与不可映射的源一起使用?

c linux linux-kernel

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

你如何在gdb中反汇编重载运算符?

如果我有bool运算符==(const uint128&x,const uint128&y); 我怎样才能让gdb反汇编呢?

c++ gdb

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

使用javascript动态生成文件?

我正在为我的公司开发一个Web应用程序,它可以让我们做一些图像标记工作,我希望能够以CSV文件的形式生成结果.通过将CSV数据转储到页面上的div或某些内容并让用户将其复制出来,我可以轻松地做到这一点.我宁愿让他们点击一个生成按钮并下载一个CSV文件,好像他们点击了结果的链接,这样他们就可以更方便地将文件保存在方便的地方.

有可能用javascript模拟这种事情吗?我基本上想要动态生成文件然后让它们下载它,客户端.

javascript csv

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

为什么这个比较会返回错误?

在这个小程序中:

#include <unistd.h>
#include <stdint.h>
#include <stdio.h>

int main() {
    uint8_t a = 0;
    uint8_t b = 255;

    if (a == (b + 1)) {
        printf("Equal\n");
    } else {
        printf("Not equal\n");
    }

    if (a == ((b + 1) & 0xFF)) {
        printf("Equal\n");
    } else {
        printf("Not equal\n");
    }       
}
Run Code Online (Sandbox Code Playgroud)

我明白了:

Not Equal
Equal
Run Code Online (Sandbox Code Playgroud)

除非我强行拿最后8位,为什么比较不起作用?我猜我在这里遗漏了一些无符号算术的细微差别......

如果这有所不同,我正在使用gcc 4.4.5.

c

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

为什么类在C++中称为类?

可能重复:
为什么Java中的类为"class"?

我在考虑Haskell中的类型类,它允许您根据可以对它们执行的操作将类型分成不同的组.但是为什么类在C++中称为类?他们原本打算分类的是什么?

c++

3
推荐指数
2
解决办法
255
查看次数

有没有一种简单的方法可以找到两个值,当它们相乘时会产生精确的位模式?

出于测试目的,我需要找到两个64位整数值,它们与特定位模式的128位中间值完全相乘.显然,我可以生成所需的中间值并除以随机值,直到找到有效的组合,但是有更有效的方法吗?

c++ testing multiplication

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

是否可能有#include失败而不是中止编译?

我有一组松散相关的头库,我想让它们一起工作,而不是紧密耦合.我想到这样做的一种方法是尝试包含其他头文件,如果找到它们,那么我可以相应地生成代码.所以也许我会在vector.hh中有一个vector类:

#ifndef __VECTOR_HH__
#define __VECTOR_HH__

bunch of vector-y stuff

#endif
Run Code Online (Sandbox Code Playgroud)

然后在另一个文件coordinates.hh(让我们说它确实协调转换):

#ifndef __COORDINATES_HH__
#define __COORDINATES_HH__
#include <vector.hh>

class SomeCoordinateType {
#ifdef __VECTOR_HH__
    operator vector() { <convert to vector> }
#endif
}

#endif
Run Code Online (Sandbox Code Playgroud)

用户的想法是抓取他们需要的任何头文件.如果他们抓住了vector.hh标头以及coordinates.hh,那么我将为它们创建转换运算符,如果不是的话.这一切都取决于能否使#include指令在失败时不会产生致命错误.有没有办法做到这一点?

c c++

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