Форум программистов, компьютерный форум, киберфорум
Наши страницы

Может ли третий проверка возвращаемого функцией значения влиять на результат линковки? - C++

Войти
Регистрация
Восстановить пароль
Другие темы раздела
C++ Доступ к методам, массив указателей http://www.cyberforum.ru/cpp-beginners/thread806181.html
Можно ли как нибудь получить доступ к методу Positive в данном случае: StrL ** testStr3; testStr3= new StrL * ; testStr = new StrLBit("000110101"); bool tmp = testStr->Positive(); если StrL...
C++ Краткое и индексное хранение списков на входе задано последовательность целых положительных чисел, не более 99, заканчивающуюся нулем. Организовать последовательно-связанное индексное хранение последовательности так, чтобы числа, имеют... http://www.cyberforum.ru/cpp-beginners/thread806168.html
C++ выделение памяти
доброго времени суток)возник вопрос по поводу выделения памяти) если стоит тип int, то все работает норм, а если float то ошибку выдает)в чем косяк подскажите пожалуйста) #include<iostream> ...
C++ Алгоритм RC5
Приветствую! Очередная лаба по криптографии вызвала определенные сложности. По заданию нужно реализовать приложение, которое: "1)С помощью EKE на основе RSA проверяет подлинность двух пользователей...
C++ Копирование массива (строки) в методе класса http://www.cyberforum.ru/cpp-beginners/thread806148.html
У меня есть класс, поле которого массив символов char* В конструкторе копий требуется копировать это поле для нового объекта. Я это делаю так: char* Student::ArrayCopy(char* arr) { if (arr...
C++ Поиск слова в файле Звучит просто, а на деле... Такая простая операция и... Есть варианты? #include <iostream> #include <string> #include <stdio.h> using namespace std; int main () { setlocale (LC_ALL,... подробнее

Показать сообщение отдельно
kravam
быдлокодер
1702 / 889 / 45
Регистрация: 04.06.2008
Сообщений: 5,498
12.03.2013, 11:24  [ТС]
Ладно, упростим себе жизнь, попробуем кропать чисто dll, без *.a:

C++
1
2
3
4
5
6
7
8
9
10
11
//dllka.cpp
#include <unknwn.h>
void f(){
  
  //Размер взят от балды
  char x [23];
 
  //так ругается
  if(memcmp(&x,&IID_IUnknown,2)); 
  
}
компилим:
Bash
1
2
g++ -c -DBUILD_DLL dllka.cpp
g++ -shared -o dllka.dll "E:\Dev_Cpp_nomingw\lib\libuuid.a" dllka.o
получаем ошибку при линковке:

Bash
1
2
3
g++ -shared -o dllka.dll "E:\Dev_Cpp_nomingw\lib\libuuid.a" dllka.o
dllka.o:dllka.cpp:(.text+0x12): undefined reference to `IID_IUnknown'
collect2: ld returned 1 exit status
Но это же ложь! Смотрим:
Bash
1
2
3
4
5
6
7
8
9
10
11
12
nm dllka.o
00000000 b .bss
00000000 d .data
00000000 r .eh_frame
00000000 t .text
 
         //Вот идентификатор
         U _IID_IUnknown
 
 
00000000 T __Z1fv
         U _memcmp
и далее:

Bash
1
2
3
4
5
6
7
8
9
10
11
12
13
14
nm "E:\Dev_Cpp_nomingw\lib\libuuid.a"
 
...
00000000 r .rdata
00000000 t .text
00000010 R _IID_IClassFactory
 
//И вот идентификатор!
00000000 R _IID_IUnknown
 
servprov-uuid.o:
00000000 b .bss
00000000 d .data
...
То есть _IID_IUnknown присутствует как в файле dllka.o, на базе которого я и строю *.dll, так и в libuuid.a, который я прилинковываю. Тем не менее, ничё не прилинковывается, сами видите

Добавлено через 14 минут
+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++

Ещё упрощаем жизнь. Кропаем не dll, а exe:
C++
1
2
3
4
5
6
7
8
9
10
//dllka.cpp
#include <unknwn.h>
int main (){
  
  //Размер взят от балды
  char x [23];
 
  //так ругается
  if(memcmp(&x,&IID_IUnknown,2)); 
}
компилим:
Bash
1
2
g++ -c main.cpp
g++ -o main.exe "E:\Dev_Cpp_nomingw\lib\libuuid.a" main.o
Те же ошибки, _IID_IUnknown присутствует как в libuuid.a, так и в main.o

Добавлено через 13 минут
В MSVS на ура всё проходит...
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
#include "stdafx.h"
#include <unknwn.h>
 
 
int _tmain(int argc, _TCHAR* argv[])
{
        //Размер взят от балды
  char x [23];
 
  //так ругается
  if(memcmp(&x,&IID_IUnknown,2)); 
 
    return 0;
}
0
 
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru