小编Flo*_*mer的帖子

如何遍历Java String的unicode代码点?

所以我知道String#codePointAt(int),但它是由char偏移索引,而不是由代码点偏移索引.

我正在考虑尝试这样的事情:

但我担心的是

  • 我不确定自然处于高代理范围内的代码点是否会存储为两个char值或一个值
  • 这似乎是迭代字符的一种非常昂贵的方式
  • 有人必须想出更好的东西.

java string unicode

99
推荐指数
4
解决办法
3万
查看次数

无法编译:部分文本中无法识别的重定位 0x2a

编译“make”时收到错误消息

$ make
g++ -fopenmp  -o lang.test main.o -I../../../include/Lheader -I../../../include -L../../../lib/ -llmi -lblas -lboost_regex -lpthread -lleveldb
/usr/bin/ld: ../../../lib//liblmi.a(LMInterface.o): unrecognized relocation (0x2a) in section `.text'
/usr/bin/ld: final link failed: Bad value
collect2: error: ld returned 1 exit status
Run Code Online (Sandbox Code Playgroud)

我找不到上述问题的任何解决方案。

GCC 版本和 ld 版本是这样的:

$ gcc --version
gcc (Ubuntu 5.4.1-2ubuntu1~14.04) 5.4.1 20160904
Copyright (C) 2015 Free Software Foundation, Inc.
This is free software; see the source for copying conditions.  There is NO
warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR …
Run Code Online (Sandbox Code Playgroud)

gcc ld binutils

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

终结者统计

有没有办法获得使用runtime.SetFinalizer和尚未运行的终结器总数?

我们正在考虑struct在我们的某些产品中添加一个注册的终结器以释放使用的内存malloc,并且该对象可能具有相对较高的分配率.如果我们能够监控终结器的数量,确保它们不会堆积并触发内存不足错误(就像它们倾向于与其他垃圾收集器一样),那将是很好的.

(我知道显式释放会避免这个问题,但我们不能改变现有的代码,它不会调用Close函数或类似的东西.)

finalization go

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

如何在 Rust 的内联汇编宏中使用常量?

我正在将一些遗留汇编代码移植到 Rust,我需要通过asm!宏调用它。然而,汇编代码依赖于 C 头文件中存储的一些常量。我想保持类似,在 Rust 中定义常量,并在宏中包含常量的名称asm

旧版 C 标头:

#define HCR_VALUE 0xffff0000
Run Code Online (Sandbox Code Playgroud)

旧版 ASM 文件:

.func
...
ldr    x0, =HCR_VALUE
...
Run Code Online (Sandbox Code Playgroud)

铁锈代码:

pub const HCR_VALUE: u32 = 0xffff0000;
Run Code Online (Sandbox Code Playgroud)
unsafe { asm!("ldr x0, HCR_VALUE":::"x0"); }
Run Code Online (Sandbox Code Playgroud)

构建应用程序最终会出现链接器错误:

lld-link: error: undefined symbol: HCR_VALUE
Run Code Online (Sandbox Code Playgroud)

inline-assembly rust arm64

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

Alpine Linux 上的符号版本控制

musl C 库只有符号版本控制的近似实现。这可能导致具有不同符号版本的符号绑定在一起,这在完整实现中不会发生。因此,希望使用 musl 构建的项目最好完全避免符号版本控制。(不支持符号版本控制本身对于工具链来说不一定是一个糟糕的选择;这完全取决于目标受众。)

但是,Alpine Linux 工具链编译 binutils 时具有完整的符号版本支持:GAS 支持该.symver指令,链接编辑器处理版本脚本并分配符号版本(就像在 GNU/Linux 上一样)。一个简单的编译器/汇编器或链接检查显示符号版本支持。因此,Alpine Linux 在发行版中包含的一些共享对象实际上使用了符号版本控制,尽管 musl 动态加载器会忽略这些数据。(数据只会使二进制文件膨胀。)

在某些情况下,软件无法运行(在构建正常之后),因为它以 musl 动态链接器不支持的方式使用兼容性符号(没有默认版本的符号)。这是一个不起作用的小例子:

cat > symver.c <<EOF
void
compat_function (void)
{
}
__asm__ (".symver compat_function,compat_function@SYMVER");

void
call_compat_function (void)
{
  return compat_function ();
}
EOF

echo "SYMVER { };" > symver.map

cat > main.c <<EOF
extern void call_compat_function (void);

int
main (void)
{
  call_compat_function ();
}
EOF

gcc -fpic -shared -o symver.so -Wl,--version-script=symver.map symver.c
gcc -Wl,--rpath=. -o main …
Run Code Online (Sandbox Code Playgroud)

binutils musl alpine-linux

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

如果在同一翻译单元中调用函数,为什么需要重定位

因此,我有两个文件,一个是我的库,另一个是主要的prog可执行文件。图书馆:

static int internal1(int a, int b){
  return a + b;
}

namespace {
  int internal2(int a, int b){
    return a + b;
  }
}

void external2(int qq, int zz){

}

void external(int a, int b){
  external2(a, b);
  internal1(a, b);
  internal2(a, b);
}
Run Code Online (Sandbox Code Playgroud)

g++ -c -O0 -fPIC -o libtest.o libtest.cpp和 编译 g++ -shared -o libtest.so libtest.o

主要编:

extern void external(int a, int b);

int main(){
  external(1, 2);
  return 0;
}
Run Code Online (Sandbox Code Playgroud)

编译与 g++ -O0 -L. -ltest -o tester tester.cpp …

c++ linker g++ elf linkage

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

升级到C ++ 17-错误:'__BEGIN_NAMESPACE_STD'没有命名类型

我正在尝试将应用程序升级到C ++ 17并收到以下编译器错误:

error: ‘__BEGIN_NAMESPACE_STD’ does not name a type
Run Code Online (Sandbox Code Playgroud)

我正在使用gcc(GCC)8.2.0并使用以下命令进行编译:

g++ -std=c++17 variant.cpp -o variant
Run Code Online (Sandbox Code Playgroud)

这是一个小测试程序:

#include <iostream>
#include <variant>

using v_t = std::variant<int, double>;

int main(int argc, char const* argv[]) {

    v_t foo = 5;
    printf("foo contains %d\n", *std::get_if<int>(&foo));

    std::cout << "Success" << std::endl;
    return 0;
}
Run Code Online (Sandbox Code Playgroud)

这是我得到的错误(如下)。请注意,如何在stdlib.h中启用__BEGIN_NAMESPACE_STD讨论了类似的问题,但是建议的解决方案(包括C ++头文件,而不是诸如stdlib.h之类的C头文件)是我已经在做的事情。

我能够在OSX便携式计算机上编译此代码,可能是因为默认情况下安装了更新的libc。但是,当我在Linux机器上运行时,出现这些错误。在Linux机器上,我正在使用以下链接器/ glibc版本:ldd (Ubuntu EGLIBC 2.19-0ubuntu6.14) 2.19

我正在继续调试,但是希望有朝正确方向发展的指针。

In file included from /toolchains/gcc-8.2.0/include/c++/8.2.0/cstdlib:75,
                 from /toolchains/gcc-8.2.0/include/c++/8.2.0/ext/string_conversions.h:41,
                 from /toolchains/gcc-8.2.0/include/c++/8.2.0/bits/basic_string.h:6391,
                 from /toolchains/gcc-8.2.0/include/c++/8.2.0/string:52,
                 from /toolchains/gcc-8.2.0/include/c++/8.2.0/bits/locale_classes.h:40,
                 from /toolchains/gcc-8.2.0/include/c++/8.2.0/bits/ios_base.h:41,
                 from /toolchains/gcc-8.2.0/include/c++/8.2.0/ios:42,
                 from /toolchains/gcc-8.2.0/include/c++/8.2.0/ostream:38, …
Run Code Online (Sandbox Code Playgroud)

c++ libstdc++ c++17

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

如何在不收集到临时向量的情况下对结果的迭代器执行迭代器计算?

我正在寻找一种方法来消除此示例中的临时向量分配:

fn doit<T: Iterator<Item = Result<i32, &'static str>>>(name: &str, iter: T) {
    println!(
        "{}: {:?}",
        name,
        iter.collect::<Result<Vec<_>, _>>()
            .map(|v| v.into_iter().min())
    );
}

fn main() {
    let without_errors = vec![Ok(1), Ok(2), Ok(3)];
    let with_errors = vec![Ok(1), Err("error"), Ok(2)];

    doit("without errors", without_errors.into_iter());
    doit("with errors", with_errors.into_iter());
}
Run Code Online (Sandbox Code Playgroud)

这是具有错误处理主题的迭代器的变体,除了我不想创建集合(因此collect()不能完全完成工作),但我想对被迭代的元素执行进一步的操作。

请注意,这给出了错误的结果,因为Ok小于Err

fn doit<T: Iterator<Item = Result<i32, &'static str>>>(name: &str, iter: T) {
    println!("{}: {:?}", name, iter.min());
}
Run Code Online (Sandbox Code Playgroud)

它会max()意外地给出正确的结果,但它不会停止迭代第一个错误。

iterator rust

5
推荐指数
2
解决办法
1506
查看次数

在 gcp 中调用 actions.get 会抛出“字段 [名称] 有问题 [无效的操作名称]”

最近,我试图在 GCP https://cloud.google.com/resource-manager/reference/rest/v1/operations/get中的 API 资源管理器上获取调用 operation.get 的操作的状态

请求抛出: field [name] has issue [invalid operation name]

我使用 GCP 的节点库尝试了相同的请求,并得到了相同的结果。

使用的操作名称格式如下: operations/operation-1552901443197-5845b0ae4997f-496bcbdb-xxxxxx

以前有人遇到过这个错误吗?

google-cloud-platform google-apis-explorer

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

解决方法 --exclude-libs 在 OS X 的 clang 上不可用

我需要创建一个需要使用不同版本的 OpenSSL (BoringSSL) 的包装器库,原因请参阅“包装器共享对象”[1]。

问题是 --exclude-libs 不适用于 OS X 的 clang,因此符号被导出,这是我必须避免的。

我必须采取哪些选项来解决此问题,例如在构建库后剥离符号?

[1] https://wiki.openssl.org/index.php/Android

macos g++ clang ld clang++

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