.obj 与 .exe 的区别

本文解释了编译过程中产生的OBJ文件的作用及其与EXE文件的区别。OBJ文件包含跨平台的二进制代码,通过链接器转换为特定平台的可执行文件格式。文章还介绍了如何手动添加库文件。
  1. obj里存的是编译后的代码跟数据,并且有名称,所以在连接时会出现未解决的外部符号一说。当连成exe后便不存在名称的概念了,只有地址。lib就是一堆obj的组合。   
    编译器会默认链接一些常用的库,其它的需要你自己指定。
  2. 目标文件,一般是程序编译后的【二进制文件】,再通过链接器和资源文件链接就成可执行文件了。OBJ只给出了程序的【相对地址】,而可执行文件是【绝对地址】。CPP对应的二进制代码格式obj,是未经重定位的!
  3. 编译c 程序会产生obj 文件和exe 文件,我们都知道exe 文件是可执行文件,但obj 文件是做什么用呢?查了下资料发现obj 文件和exe 文件都是二进制数据文件,其中obj 文件是COFF 格式,exe 文件时PE 格式,那为什么不直接让 obj 文件作为可执行文件呢,原来obj 文件格式是跨平台 ,通过link 可以将obj 链接为所使用系统能够识别格式,比如windows 系统中的exe 文件。
  4. 手动添加库文件:#pragma                comment(lib,"lib//tlib.lib")
  5. 参考http://blog.youkuaiyun.com/beryl_song/article/details/5556319

 

"C:\Program Files\JetBrains\CLion 2025.2\bin\cmake\win\x64\bin\cmake.exe" --build C:\Users\ROG\Desktop\123\robowalker-2025-power-sampler\test\cmake-build-debug-mingw-stm32 --target test.elf -j22 [1/1] Linking CXX executable test.elf FAILED: test.elf C:\WINDOWS\system32\cmd.exe /C "cd . && C:\CLionToolchains\gcc-arm-none-eabi-10.3-2021.10-win32\gcc-arm-none-eabi-10.3-2021.10\bin\arm-none-eabi-g++.exe -g -Wl,-gc-sections,--print-memory-usage,-Map=C:/Users/ROG/Desktop/123/robowalker-2025-power-sampler/test/cmake-build-debug-mingw-stm32/test.map -mcpu=cortex-m4 -mthumb -mthumb-interwork -T C:/Users/ROG/Desktop/123/robowalker-2025-power-sampler/test/STM32F401CCUX_FLASH.ld CMakeFiles/test.elf.dir/Core/Src/adc.c.obj CMakeFiles/test.elf.dir/Core/Src/dma.c.obj CMakeFiles/test.elf.dir/Core/Src/gpio.c.obj CMakeFiles/test.elf.dir/Core/Src/main.c.obj CMakeFiles/test.elf.dir/Core/Src/stm32f4xx_hal_msp.c.obj CMakeFiles/test.elf.dir/Core/Src/stm32f4xx_it.c.obj CMakeFiles/test.elf.dir/Core/Src/syscalls.c.obj CMakeFiles/test.elf.dir/Core/Src/sysmem.c.obj CMakeFiles/test.elf.dir/Core/Src/system_stm32f4xx.c.obj CMakeFiles/test.elf.dir/Core/Src/tim.c.obj CMakeFiles/test.elf.dir/Core/Src/usart.c.obj CMakeFiles/test.elf.dir/Core/Startup/startup_stm32f401ccux.s.obj CMakeFiles/test.elf.dir/Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal.c.obj CMakeFiles/test.elf.dir/Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_adc.c.obj CMakeFiles/test.elf.dir/Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_adc_ex.c.obj CMakeFiles/test.elf.dir/Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_cortex.c.obj CMakeFiles/test.elf.dir/Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_dma.c.obj CMakeFiles/test.elf.dir/Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_dma_ex.c.obj CMakeFiles/test.elf.dir/Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_exti.c.obj CMakeFiles/test.elf.dir/Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_flash.c.obj CMakeFiles/test.elf.dir/Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_flash_ex.c.obj CMakeFiles/test.elf.dir/Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_flash_ramfunc.c.obj CMakeFiles/test.elf.dir/Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_gpio.c.obj CMakeFiles/test.elf.dir/Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_pwr.c.obj CMakeFiles/test.elf.dir/Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_pwr_ex.c.obj CMakeFiles/test.elf.dir/Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_rcc.c.obj CMakeFiles/test.elf.dir/Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_rcc_ex.c.obj CMakeFiles/test.elf.dir/Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_tim.c.obj CMakeFiles/test.elf.dir/Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_tim_ex.c.obj CMakeFiles/test.elf.dir/Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_uart.c.obj CMakeFiles/test.elf.dir/Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_ll_adc.c.obj CMakeFiles/test.elf.dir/User_File/1_Middleware/1_Driver/ADC/drv_adc.cpp.obj CMakeFiles/test.elf.dir/User_File/1_Middleware/1_Driver/Math/drv_math.cpp.obj CMakeFiles/test.elf.dir/User_File/1_Middleware/1_Driver/TIM/drv_tim.cpp.obj CMakeFiles/test.elf.dir/User_File/1_Middleware/1_Driver/UART/drv_uart.cpp.obj CMakeFiles/test.elf.dir/User_File/1_Middleware/2_Algorithm/FSM/alg_fsm.cpp.obj CMakeFiles/test.elf.dir/User_File/1_Middleware/2_Algorithm/Filter/alg_filter.cpp.obj CMakeFiles/test.elf.dir/User_File/1_Middleware/2_Algorithm/PID/alg_pid.cpp.obj CMakeFiles/test.elf.dir/User_File/1_Middleware/2_Algorithm/Queue/alg_queue.cpp.obj CMakeFiles/test.elf.dir/User_File/1_Middleware/2_Algorithm/Slope/alg_slope.cpp.obj CMakeFiles/test.elf.dir/User_File/2_Device/Sampler/dvc_sampler.cpp.obj CMakeFiles/test.elf.dir/User_File/2_Device/Serialplot/dvc_serialplot.cpp.obj CMakeFiles/test.elf.dir/User_File/3_Task/tsk_config_and_callback.cpp.obj -o test.elf && C:\WINDOWS\system32\cmd.exe /C "cd /D C:\Users\ROG\Desktop\123\robowalker-2025-power-sampler\test\cmake-build-debug-mingw-stm32 && arm-none-eabi-objcopy -Oihex C:/Users/ROG/Desktop/123/robowalker-2025-power-sampler/test/cmake-build-debug-mingw-stm32/test.elf C:/Users/ROG/Desktop/123/robowalker-2025-power-sampler/test/cmake-build-debug-mingw-stm32/test.hex && arm-none-eabi-objcopy -Obinary C:/Users/ROG/Desktop/123/robowalker-2025-power-sampler/test/cmake-build-debug-mingw-stm32/test.elf C:/Users/ROG/Desktop/123/robowalker-2025-power-sampler/test/cmake-build-debug-mingw-stm32/test.bin"" c:/cliontoolchains/gcc-arm-none-eabi-10.3-2021.10-win32/gcc-arm-none-eabi-10.3-2021.10/bin/../lib/gcc/arm-none-eabi/10.3.1/../../../../arm-none-eabi/bin/ld.exe:C:/Users/ROG/Desktop/123/robowalker-2025-power-sampler/test/STM32F401CCUX_FLASH.ld:88: non constant or forward reference address expression for section .ARM.extab collect2.exe: error: ld returned 1 exit status ninja: build stopped: subcommand failed.
最新发布
08-22
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值