Сейчас на форуме: jinoweb (+4 невидимых)

 eXeL@B —› Программирование —› Linking static library in VS 2008
Посл.ответ Сообщение


Ранг: 622.6 (!), 521thx
Активность: 0.330.89
Статус: Участник
_Вечный_Студент_

Создано: 28 февраля 2020 08:44 · Поправил: plutos
· Личное сообщение · #1

Краткая предыстория: достался мне набор файлов, вместе составляющих visual studio project (но только source files and headres (.срр и .h), самого .vcproj файла нет).
Создатель проэкта сразу сделал оговорку, что проэкт собирать в VS 2005 или в VS2008.
Я как-то все эти upgrades проэктов к новым версиям студии не люблю, там разные "чудеса" случаются, поэтому взял VS2008, создал проэкт, добавил к нему уже имеющиеся файлы и собрал без проблем. Все работает, никаких претензий.

В числе набора файлов были один .lib file and header для этой библиотеки.
Linker все сделал как надо - статически встроил код из библиотеки в созданый .ехе, я его прекрасно вижу в hex dump'e of the final exe и в dumpbin выхлопе, если на вход даю свою statically linked library (.lib file).
Все на месте как надо.
Но при сборке я не указывал linker'y Additional Dependencies с указанием на мою статическую библиотеку.
В Property pages моего .lib файла в разделе Cofiguration Properties, General, Tool => стоит "Custom Build Tool".
Но что это за tool в данном случае я так и не смог понять, нигде нет ничего, даже в project file. И откуда он там взялся?
Я никаких custom build rules and tools не добавлял. В header'e тоже ничего нет, никаких linker pragma's.

Вопрос: каким образом VSBuild механизм определил, что .lib file это статик библиотека и встроил его куда надо?
Mоя последняя догадка - это инфо, содержащаяся в самом .lib file.

Code:
  1. Microsoft (R) COFF/PE Dumper Version 9.00.21022.08
  2. Copyright (C) Microsoft Corporation.  All rights reserved.
  3.  
  4. Dump of file xyz.lib
  5.  
  6. File Type: <b>LIBRARY</b>
  7.  
  8. Archive member name at 8: /               
  9. 5E575B22 time/date Thu Feb 27 00:01:06 2020
  10.          uid
  11.          gid
  12.        0 mode
  13.       16 size
  14. correct header end
  15.  
  16.     1 public symbols
  17.  
  18.        B2 _xyz_disasm@8
  19.  
  20. Archive member name at 5A: /               
  21. 5E575B22 time/date Thu Feb 27 00:01:06 2020
  22.          uid
  23.          gid
  24.        0 mode
  25.       1C size
  26. correct header end
  27.  
  28.     1 offsets
  29.  
  30.         1       B2
  31.  
  32.     1 public symbols
  33.  
  34.         1 _xyz_disasm@8
  35.  
  36. Archive member name at B2: xyz.obj/        
  37. 45CCA04E time/date Fri Feb 09 10:24:46 2007
  38.          uid
  39.          gid
  40.   100666 mode
  41.      520 size
  42. correct header end
  43.  
  44. FILE HEADER VALUES
  45.              14C machine (x86)
  46.                2 number of sections
  47.         45CCA04C time date stamp Fri Feb 09 10:24:44 2007
  48.              442 file pointer to symbol table
  49.                A number of symbols
  50.                0 size of optional header
  51.                0 characteristics
  52.  
  53. SECTION HEADER #1
  54.    .text name
  55.        0 physical address
  56.        0 virtual address
  57.      1CA size of raw data
  58.       64 file pointer to raw data (00000064 to 0000022D)
  59.      22E file pointer to relocation table
  60.        0 file pointer to line numbers
  61.        2 number of relocations
  62.        0 number of line numbers
  63. 60300020 flags
  64.          Code
  65.          4 byte align
  66.          Execute Read
  67.  
  68. RAW DATA #1
  69. .....
  70.   
  71. RELOCATIONS #1
  72.                                                 Symbol    Symbol
  73.  Offset    Type              Applied To         Index     Name
  74.  --------  ----------------  -----------------  --------  ------
  75.  00000076  DIR32                      00000000         7  xyz_TABLE_EXT
  76.  0000007D  DIR32                      00000000         8  xyz_TABLE
  77.  
  78. SECTION HEADER #2
  79.    .data name
  80.      1CA physical address
  81.        0 virtual address
  82.      200 size of raw data
  83.      242 file pointer to raw data (00000242 to 00000441)
  84.        0 file pointer to relocation table
  85.        0 file pointer to line numbers
  86.        0 number of relocations
  87.        0 number of line numbers
  88. C0300040 flags
  89.          Initialized Data
  90.          4 byte align
  91.          Read Write
  92.  
  93. RAW DATA #2
  94. .....
  95.   
  96.  
  97. COFF SYMBOL TABLE
  98. 000 00000000 DEBUG  notype       Filename     | .file
  99.     obj.asm
  100. 002 001220FC ABS    notype       Static       | @comp.id
  101. 003 00000000 SECT1  notype       Static       | .text
  102.     Section length  1CA, #relocs    2, #linenums    0, checksum        0
  103. 005 00000000 SECT2  notype       Static       | .data
  104.     Section length  200, #relocs    0, #linenums    0, checksum        0
  105. 007 00000100 SECT2  notype       Static       | xyz_TABLE_EXT
  106. 008 00000000 SECT2  notype       Static       | xyz_TABLE
  107. 009 00000000 SECT1  notype ()    External     | _xyz_disasm@8
  108.  
  109. String Table Size = 0x2A bytes
  110.  
  111.   Summary
  112.  
  113.          200 .data
  114.          1CA .text


Т.е. Linker читает информацию из COFF SYMBOL TABLE и использует ее для своих целей?

-----
Give me a HANDLE and I will move the Earth.





Ранг: 681.5 (! !), 405thx
Активность: 0.420.21
Статус: Участник
ALIEN Hack Team

Создано: 28 февраля 2020 15:11
· Личное сообщение · #2

plutos
В коде могут быть директивы #pragma comment(lib,"xyz.lib")

-----
Stuck to the plan, always think that we would stand up, never ran.


| Сообщение посчитали полезным: plutos

Ранг: 158.4 (ветеран), 123thx
Активность: 0.140.49
Статус: Участник

Создано: 28 февраля 2020 16:15
· Личное сообщение · #3

plutos пишет:
Но при сборке я не указывал linker'y Additional Dependencies с указанием на мою статическую библиотеку.

Если либу в файлы проекта добавил, это то же самое.

| Сообщение посчитали полезным: plutos


Ранг: 622.6 (!), 521thx
Активность: 0.330.89
Статус: Участник
_Вечный_Студент_

Создано: 29 февраля 2020 02:18 · Поправил: plutos
· Личное сообщение · #4

ARCHANGEL пишет:
В коде могут быть директивы #pragma comment(lib,"xyz.lib")

plutos пишет:
никаких linker pragma's.


-----
Give me a HANDLE and I will move the Earth.


| Сообщение посчитали полезным: ARCHANGEL
 eXeL@B —› Программирование —› Linking static library in VS 2008
Эта тема закрыта. Ответы больше не принимаются.
   Для печати Для печати