小编com*_*por的帖子

什么是 ___lldb_unnamed_symbol?

我想在第三方类实例方法上设置断点。

br set -r "\[ThirdPartyClass .*\]$"
Run Code Online (Sandbox Code Playgroud)

但我得到了(没有位置)

然后我想查找这个类并发现它有什么问题。

image lookup -t ThirdPartyClass
Run Code Online (Sandbox Code Playgroud)

输出为空。事情变得很奇怪。

最后,我使用 hopper 来查找实例方法的地址偏移量,如下所示。

                     -[ThirdPartyClass aMethod:]:
00000001008f83b8         stp        x22, x21, [sp, #-0x30]!                     ; Objective C Implementation defined at 0x101098168 (instance method), DATA XREF=0x101098168
00000001008f83bc         stp        x20, x19, [sp, #0x10]
00000001008f83c0         stp        x29, x30, [sp, #0x20]
00000001008f83c4         add        x29, sp, #0x20
00000001008f83c8         mov        x19, x2
00000001008f83cc         mov        x20, x0
00000001008f83d0         adrp       x8, #0x101102000
00000001008f83d4         ldr        x1, [x8, #0xb40]
00000001008f83d8         mov        x0, x19
00000001008f83dc         bl         imp___stubs__objc_msgSend
00000001008f83e0         adrp …
Run Code Online (Sandbox Code Playgroud)

reverse-engineering objective-c ios lldb

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

Swift 编译器是否会自动将循环矢量化作为优化?

我\xe2\x80\x99m 正在学习并行/分布式计算课程,并且想知道 Swift 编译器是否执行任何自动矢量化来优化循环。我知道 LLVM 执行了很多(全部?)优化。我发现这个页面详细介绍了它的一些自动矢量化优化,其中指出它默认处于打开状态:( https://llvm.org/docs/Vectorizers.html#the-loop-vectorizer )

\n\n

我想知道 Swift 是否仍然如此,因为它\xe2\x80\x99s 构建在 LLVM 之上。这些优化也会发生在 SIL 或 IR 级别吗?我\xe2\x80\x99m是编译器新手,所以如果我的理解不正确,请纠正我。谢谢

\n

compiler-construction compiler-optimization auto-vectorization swift

5
推荐指数
0
解决办法
661
查看次数

LLVM LD 选项“-rpath-link”

当使用 GNU LD for Linux 使用“-rpath-link”选项链接一些 C 代码时,它工作得很好并且符合预期。

但是,当使用适用于 Mac OS X 的 LLVM LD 版本 3.7.1 使用“-rpath-link”选项链接相同的 C 代码时,LD 会给出错误(“未知选项”)。

我的问题是:LLVM LD 中的“-rpath-link”选项相当于什么?

c macos gcc ld lld

5
推荐指数
0
解决办法
796
查看次数

将Webassembly编译为本机可执行文件

是否有任何工具可以将wasm模块编译为本地可执行文件(例如,ELF或.exe文件)?类似脚本,但相反。失败了,还有其他方法可以在浏览器之外运行webassembly吗?

transpiler webassembly

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

在容器中存储boost :: function对象

我有一个KeyCallbacks 的向量:

typedef boost::function<void (const KeyEvent&)> KeyCallback
Run Code Online (Sandbox Code Playgroud)

我用它来存储按下键盘按钮时的所有监听器.我可以添加它们并将事件发送到所有回调for_each,但我不知道如何KeyCallback从我的向量中删除特定的签名.

例如,我想要这样的东西:

void InputManager::UnregisterCallback(KeyCallback callback) {
  mKeyCallbacks.erase(std::find(mKeyCallbacks.begin(), mKeyCallbacks.end(), callback));
}
Run Code Online (Sandbox Code Playgroud)

根据boost::function文档(见这里),没有比较函数对象的东西,这可以解释我上面的问题.我被困了吗?这有什么好办法吗?

(我读到boost::signals了回调机制,但它显然很慢,我希望回调可能会在一帧内被解雇几次.)

c++ boost boost-function

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

llc 没有 debug 或 -view-dag-combine1-dags 选项

llc通过包管理器在我的计算机上安装了程序(当然我安装了 LLVM,6.0.0 版本)。另外,我还从源头构建了它。我想要的是查看由 llvm 生成的 DAG。但是,不幸的是,我-debug-view-dag-combine1-dags两个版本的llc. 这让我发疯,因为到处都写着这个标志应该对我有帮助,但没有提到如果我没有它们该怎么办。在 help 和 man 中,没有这样的选项。我安装了graphviz、dot和gv,应该不是问题。

编译的版本llc

./llc -version
LLVM (http://llvm.org/):
LLVM version 7.0.0svn
Optimized build.
Default target: x86_64-unknown-linux-gnu
Host CPU: broadwell

Registered Targets:
   and targets...
Run Code Online (Sandbox Code Playgroud)

我已经使用 RelWithDebugInfo 标志构建了它,也许我应该使用 Debug 标志构建它?或者 cmake 中是否有任何我应该启用的标志?我相信我已经用谷歌搜索得够多了,但我找不到任何信息。

llvm llc

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

如何在 LLVM 中保留寄存器?

我正在尝试实现一个特殊的编译器级 LLVM pass,它必须在 ARM 微架构中可用的 32 个 GPR 中保留 20 个寄存器,以便我将在这些保留的寄存器上执行我的实验。我打算在 IR 层面上做这件事。是否可以?

compiler-construction arm code-generation llvm llvm-ir

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

lang-如何检索“ Expr”作为字符串?

我正在使用Clang / libtooling(ASTComsumer带有Matcher)来访问所有return语句(ReturnStmt)。我需要提取return字符串形式的关键字之后的表达式,以便可以将其放入替换return语句的宏中。

例如,我要替换以下行:

return somefunc() + 1;
Run Code Online (Sandbox Code Playgroud)

FUNCTION_EXIT(somefunc() + 1); // FUNCTION_EXIT is a C macro
Run Code Online (Sandbox Code Playgroud)

return进行一些记录后,宏将从函数中获取。

我正在使用ReturnStmt::getRetValue()该返回值,Expr并尝试以字符串形式获取它(以便可以将其传递给宏),但是我还没有找到一种方法。有没有一种方法可以分类Expr

clang llvm-clang libtooling

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

Float, Double data types confusion in external functions (C)

The code below compiles alright:

#include <stdio.h>

double add(double summand1, double summand2)
{
    double sum;
    sum = summand1+summand2;
    return sum;
}

double subtract(double minuend, double subtrahend)
{
    double diff;
    diff = minuend-subtrahend;
    return diff;
}

int main()
{
    double a,b,c,d;
    printf("Enter Operand 1:\n");
    scanf("%d",&a);
    printf("Enter Operand 2:\n");
    scanf("%d",&b);
    // Add
    c = add(a,b);

    // Subtract
    d = subtract(a,b);

    printf("Sum: %.3f\n", c);
    printf("Difference: %.3f\n", d);

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

However, when entering 5 and 5 the result is 0.000 (wrong) and 0.000 …

c double

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

在 CMake 中使用 protobuf 作为 ExternalProject

最初我在 VCS 中有一份 protobuf 的副本,我完全不同意。我想使用 protobuf 作为我项目的外部依赖项。

只有libprotobuf.cmakelibprotobuf-lite.cmake是图书馆所必需的。这些文件可以包含在这样的自定义中CMakeLists.txt

cmake_minimum_required(VERSION 2.8.12)

project(protobuf C CXX)
# set protobuf_source_dir
# set protobuf_SHARED_OR_STATIC to "SHARED" or "STATIC"
include_directories(${protobuf_source_dir}/src)

include(${protobuf_source_dir}/cmake/libprotobuf-lite.cmake)
include(${protobuf_source_dir}/cmake/libprotobuf.cmake)
Run Code Online (Sandbox Code Playgroud)

我听说过 CMake 的ExternalProject,但是 CMake 抱怨它CMakeLists.txt在该项目中找不到任何内容。

c++ cmake protocol-buffers

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

macOS 上使用 Ninja 的 CMake GUI

我正在尝试使用 CMake GUI 创建 Ninja 构建文件。

我尝试使用 Brew 手动在 macOS 上安装 Ninja。两次我都确保 ninja 在 PATH 上可用,但 CMake GUI 始终无法找到 ninja。

CMake 错误:CMake 无法找到与“Ninja”对应的构建程序。CMAKE_MAKE_PROGRAM 未设置。您可能需要选择不同的构建工具。

命令行上的 CMake 能够找到 ninja。只是 cmake-GUI 不是。

任何提示都高度赞赏。

cmake ninja cmake-gui

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

编译器错误将作为"成员'价格'的请求,而不是结构或联合'

我只是想学习C并试图理解结构和指针.我写的一个程序是编译错误如下:

:29:18:错误:要求成员'价格'不是结构或联合.

示例程序:

#include <stdio.h>
#include <stdlib.h>

typedef struct  {
    char *Title;
    float price;
} Book;


int main()
{
    int a  = 10;
    Book *HFJ = malloc(sizeof *HFJ)  ;
    HFJ->Title = "Head First Java";
    HFJ->price = 200;
    void *object;
    object = &a;
    printf("Value of object is %d", * (int*)object);
    printf("Value of HFJ %f", HFJ->price);
    object = HFJ;
    (Book*)object->price = 300;
    return 0;
}
Run Code Online (Sandbox Code Playgroud)

c

-1
推荐指数
1
解决办法
87
查看次数