标签: ld

ld:对'eax'的未定义引用

我从来没有把这个错误包含在我的旧linux机器上(两者都是intel 32bit),所以我很茫然.

我试图组装和链接汇编代码(这是非常简单的,应该工作),但是ld给出了错误

rs.o: In function `_start':
(.text+0x11): undefined reference to `eax'
Run Code Online (Sandbox Code Playgroud)

有问题的pushl %eax线是线.我只需要将0的单个字节推送到堆栈,所以我决定使用xor'd eax寄存器.但是在使用代码组装时pushb给了我一个" 无效后缀或操作数推送 "错误,如果我尝试使用汇编很好但链接器对我大喊大叫.aspushb %alpushl %eax as

这是代码.

.section .data

.section .text

.global _start

_start:

xorl %eax, %eax

#sys_socketcall(int call, __user *args)
#sys_socket(int domain, int type, int protocol)

pushl %eax          #protocol: 0
pushl $1            #type: SOCK_STREAM
pushl $2            #domain: AF_INET
movL $1, %ebx       #sys_socket
movl $102, %eax    #sys_socketcall
int $0x80

movl $eax, %ebx  #move socket fd to …
Run Code Online (Sandbox Code Playgroud)

linux x86 assembly ld

0
推荐指数
1
解决办法
1725
查看次数

gcc -Wl,--exclude-libs,<library.a> 不起作用

我在 Linux 上使用 gcc 并为静态库创建共享库。我不想导出某些静态库中的符号。

gcc版本是4.8.0。

我在命令中尝试此选项gcc,但它不起作用:

-Wl,--排除库,libabc.a 。

如果我使用此选项,它将删除所有不是我想要的符号:

-Wl,--排除库,全部

有人可以帮助如何使用--exclude-option而不是从特定静态库导出符号吗?

谢谢钱德拉

gcc symbols ld

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

LD_LIBRARY_PATH 未链接库

我正在尝试编译一个程序,但在配置检查期间找不到一个库。将我的 .bashrc 文件链接到这个库:

 LD_LIBRARY_PATH=/usr/lib/:/users/much/needed/library/:$LD_LIBRARY_PATH:/path/to/other/libs/

 export LD_LIBRARY_PATH
Run Code Online (Sandbox Code Playgroud)

之后,我使用了 .bashrc 文件

 source ~/.bashrc
Run Code Online (Sandbox Code Playgroud)

并检查 echo $LD_LIBRARY_PATH 以查看 LD_LIBRARY_PATH 是否包含我需要的库的路径(它就在那里)。

但是,当我再次运行 ./configure 时 - 出现相同的错误。您对这里可能出现的问题有什么提示吗?我找不到任何问题...

linux bash shell ld

0
推荐指数
1
解决办法
608
查看次数

即使所有源都使用-fPIC编译,也会链接有关-fPIC的错误

我找不到谷歌的直接答案,因为我很长一段时间都没有在Linux上做过什么希望在这里找到帮助.在构建共享对象时,我在Ubuntu上遇到链接错误.链接器告诉我-fPIC即使我已经设置-fPIC了所有源文件,我也应该重新编译.输出make:

mkdir -p ../_Bin/Debug/HttpClientApi
g++ -fPIC -pedantic -Wall -Wextra -std=c++11 -c CentralServerClient.cpp -o ../_Bin/Debug/HttpClientApi/CentralServerClient.o
CentralServerClient.cpp:4:80: warning: unused parameter ‘pEventListener’ [-Wunused-parameter]
 void CCentralServerClient::AddEventListener(ICentralServerClientEventListener* pEventListener)
                                                                            ^
CentralServerClient.cpp:29:83: warning: unused parameter ‘pEventListener’ [-Wunused-parameter]
 void CCentralServerClient::RemoveEventListener(ICentralServerClientEventListener* pEventListener)
                                                                               ^
g++ -fPIC -pedantic -Wall -Wextra -std=c++11 -c HttpRequest.cpp -o ../_Bin/Debug/HttpClientApi/HttpRequest.o
g++ -fPIC -pedantic -Wall -Wextra -std=c++11 -c HttpResponse.cpp -o ../_Bin/Debug/HttpClientApi/HttpResponse.o
g++ -fPIC -pedantic -Wall -Wextra -std=c++11 -c IOService.cpp -o ../_Bin/Debug/HttpClientApi/IOService.o
g++ -Wl,-shared -Wl,-v -Wl,-g -o ../_Bin/Debug/HttpClientApi.so ../_Bin/Debug/HttpClientApi/CentralServerClient.o ../_Bin/Debug/HttpClientApi/HttpRequest.o ../_Bin/Debug/HttpClientApi/HttpResponse.o ../_Bin/Debug/HttpClientApi/IOService.o …
Run Code Online (Sandbox Code Playgroud)

c++ gcc ld

0
推荐指数
1
解决办法
392
查看次数

Win32汇编 - 外部函数命名('@'的含义)

正如我所见,extern汇编代码中的WinAPI函数具有类似的名称_ExitProcess@4.

@4部分的含义是什么,以及如何确定之后使用的数字@

我知道这与我们链接的DLL有关,但在很多情况下,不知道在使用后使用的是什么数字@,这会导致许多令人讨厌的undefined reference错误.

assembly winapi nasm ld kernel32

0
推荐指数
1
解决办法
296
查看次数

使用gnu链接器更改入口点

我有一个带有_start标签的程序集文件,作为该.text段中的第一件事.我希望这个标签成为我申请的入口点.

每当我将这个文件与另一个调用了函数的文件一起传递时main,main无论如何,该函数最终都成为我的应用程序的入口点.

我正在使用GNU链接器并尝试了-e _start标志,同时更改了输入文件顺序.只要存在一个main函数,它就会成为入口点.如果我重命名该main函数,它工作正常,我的_start标签成为入口点.

编辑:好像是因为-O2编译器的标志.

屁股

.text
.global  _start
_start:
jmp main
Run Code Online (Sandbox Code Playgroud)

main.c中

int main(){
    return 0;
}
Run Code Online (Sandbox Code Playgroud)

gcc -O2 -c as.s -o as.o
gcc -O2 -c main.c -o main.o
ld -e _start as.o main.o -o test
Run Code Online (Sandbox Code Playgroud)

产量

00000000004000b0 <main>:
  4000b0:   31 c0                   xor    %eax,%eax
  4000b2:   c3                      retq   

00000000004000b3 <_start>:
  4000b3:   e9 f8 ff ff ff          jmpq   4000b0 <main>
Run Code Online (Sandbox Code Playgroud)

有任何想法吗?

c assembly gcc ld

0
推荐指数
1
解决办法
1383
查看次数

链接时为什么会出现未定义的符号?

我有两个类Triangle,ALine我想在其构造函数中ALine为属性分配新实例Triangle.但是我收到了这个错误

Undefined symbols for architecture x86_64:
  "ALine::ALine()", referenced from:
      Triangle::Triangle(triangle) in Triangle.o
ld: symbol(s) not found for architecture x86_64
Run Code Online (Sandbox Code Playgroud)

以下是我写的代码:

ALine.cpp

#include "Geometry.h"
#include "ALine.h"



ALine::ALine(point a, point b)
{       
        double tmpy = a.y - b.y;
        double tmpx = a.x - b.x;
        double tmpk;
        if(equals(tmpy, 0))
        {
            tmpk = 0;
        }
        else
        {
            tmpk = tmpx/tmpy;
        }
        double tmpq = a.y - tmpk*a.x;
        if(equals(tmpx, 0))
        {
            if(equals(a.x, 0))
            {
                if(equals(b.x, 0)) tmpk …
Run Code Online (Sandbox Code Playgroud)

c++ linker-errors ld

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

标签 统计

ld ×7

assembly ×3

gcc ×3

c++ ×2

linux ×2

bash ×1

c ×1

kernel32 ×1

linker-errors ×1

nasm ×1

shell ×1

symbols ×1

winapi ×1

x86 ×1