小编Tri*_*tos的帖子

使cmake传递命令行变量到编译器

我有以下代码:

int main() {
#ifdef COMMIT_VERSION
   cout << "app version: " << COMMIT_VERSION << endl;
#endif
}
Run Code Online (Sandbox Code Playgroud)

我想调用cmake,以便它将在命令行上定义的COMMIT_VERSION变量传递给g ++,从而传递给我的应用程序.例如,在调用之后:

cmake -WHAT_IS_THE_OPTION_NAME COMMIT_VERSION='"Hello Version"'
make
./a.out
Run Code Online (Sandbox Code Playgroud)

产生输出

app version: Hello Version
Run Code Online (Sandbox Code Playgroud)

c++ cmake

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

Cabal无法安装包装,因为它需要cabal

当我尝试安装目录包时,出现以下错误:

$ cabal install directory
Resolving dependencies...
Failed to install directory-1.2.2.1
cabal: Error: some packages failed to install:
directory-1.2.2.1 failed during the configure step. The exception was:
user error (The package requires Cabal library version -any && >=1.10 but no
suitable version is installed.)
Run Code Online (Sandbox Code Playgroud)

我的cabal版本是:

cabal --version
cabal-install version 1.16.0.2
using version 1.16.0 of the Cabal library 
Run Code Online (Sandbox Code Playgroud)

我试图执行cabal安装Cabal,但它依赖于目录,所以它也失败了.有什么问题,我该如何解决?

haskell package cabal

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

一个应用程序中同一库的两个版本

我有同一个共享库的两个版本(具有几乎相同的 API)。我必须在同一个应用程序中使用它们。我知道如何解决标题中的名称冲突 - 我将像这样导入它们

namespace version1 {
    #include "version1/library.h"
}

namespace version2 {
    #include "version2/library.h"
}
Run Code Online (Sandbox Code Playgroud)

我不知道如何解决链接冲突——库是动态链接的。第一个版本在自定义 lib 文件夹中创建以下结构:

libsomething.so -> libsomething.so.2
libsomething.so.2 -> libsomething.so.0.8.31.1
libsomething.so.0.8.31.1
Run Code Online (Sandbox Code Playgroud)

第二个:

libsomething.so -> libsomething.so.2
libsomething.so.2 -> libsomething.so.0.8.32
libsomething.so.0.8.32
Run Code Online (Sandbox Code Playgroud)

我的目标环境是Linux机器。

语境:

我有库的源代码,但它们是自动下载和编译的,所以我想避免更改这些库的 CMakeProject 中的任何内容,但如果其他选项太复杂,我可以这样做。我更喜欢在编译后对这些库进行更改的解决方案,例如更改soname。但是,如果我必须在应用程序代码中做一些复杂的事情来使用这些库,我更喜欢对这些库项目进行更改并维护它们(因为版本可以更改,但总会有两个版本 - 一个版本可能会永远设置)并且从未更新过,所以我更愿意更改这个不变的版本)。

c++ linker compilation

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

Haskell中的基本列表操作优化

Haskell中的一些基本列表操作(例如ghc)是否与其命令式对应项等效地进行了优化?

例如,如果我有一些有限但计算在运行时列表中的长度是附加到此列表还是评估函数(长度xs)必须递归遍历整个列表?

是否有一些编译器通用的Haskell(ghci或一般)优化列表?

optimization haskell

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

mapM putStrLn ["a","b"]为什么它显示三行?

Prelude> mapM putStrLn ["a", "b"]
a
b
[(),()]
Prelude> mapM_ putStrLn ["a", "b"]
a
b
Run Code Online (Sandbox Code Playgroud)

为什么第一个版本显示第三行而第二个版本不显示,第三行来自何处​​.我不指望它.

io monads haskell

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

Sybase sp_who截断主机名

我正在使用sybase服务器提供的Rapid SQL或isql连接到sql数据库。当我发出

sp_who username 
Run Code Online (Sandbox Code Playgroud)

命令我应该获得连接用户的列表。我可以,但是主机名列被截断了,例如,当主机地址为host0001时,它会被截断为host0,这是一个问题,因为有许多主机名以相同的前缀开头,例如host001,host002...。因此我不知道哪些进程阻塞了我的数据库,我无法登录到计算机并杀死这些进程。我没有特权从数据库isql控制台中杀死它们。我必须登录计算机并在那里杀死进程(因为我有特权停止这些进程)。问题是为什么sp_who会截断此列以及如何阻止它。

sql sybase admin

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

std :: mutex的线程安全性

我可以在一个线程中锁定std :: mutex并在其他线程中解锁吗?这是没有任何具体工程背景的理论问题.我只是好奇.

c++ multithreading mutex std thread-safety

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

高速缓存一致性操作期间处理器是否停顿

假设变量a = 0

Processor1: a = 1
Processor2: print(a)
Run Code Online (Sandbox Code Playgroud)

Processor1首先执行它的指令,然后在下一个周期中,processor2读取变量以打印它。因此:

  1. Processor2将暂停,直到高速缓存一致性操作完成,它将打印1

    P1:   |--a=1--|---cache--coherence---|----------------
    P2:   ------|stalls due to coherence-|--print(a=1)---|
    time: ----------------------------------------------->
    
    Run Code Online (Sandbox Code Playgroud)
  2. 高速缓存一致性操作完成之前,processor2将运行,并且在此之前它将具有陈旧的内存视图。因此它将打印0?

    P1:   |--a=1--|---cache--coherence---|
    P2:   ----------|---print(a=0)---|----
    time: ------------------------------->
    
    Run Code Online (Sandbox Code Playgroud)

    换句话说,在高速缓存一致性操作完成之前,处理器可以拥有过时的内存视图吗?

multithreading caching cpu-architecture cpu-cache

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

为什么引用无法捕获临时而const ref和rval ref可以

为什么引用无法捕获临时值,而const引用和右值引用可以捕获并延长对象的生命周期.换句话说,虽然两个第一行是合法的但第三行不是:

const string &a = string("a");
string &&b = string("b");
string &c = string("c"); // why illegal?
Run Code Online (Sandbox Code Playgroud)

c++ reference rvalue-reference const-reference

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

从 1970 年到 2020.01.01 的毫秒数

我试图从纪元到 2020.01.01 获得毫秒。我对 Date 使用了旧方法,我也想使用新的性感 LocalDate 但我得到的两个结果不同:

long millisecondsInTheDay = 24 * 60 * 60 * 1000;
long millis1 = LocalDate.of(2020, Month.JANUARY, 1).toEpochDay() * millisecondsInTheDay; // 1577836800000
long millis2 = new Date(2020 - 1900, 0, 1).toInstant().toEpochMilli(); // 1577833200000
Run Code Online (Sandbox Code Playgroud)

差异正好是一小时(3600_000 毫秒)。为什么我得到不同的结果?

java timezone calendar date java-time

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